Upload fichier

Résolu
fdthierry Messages postés 106 Date d'inscription lundi 24 novembre 2003 Statut Membre Dernière intervention 27 septembre 2019 - 1 avril 2005 à 15:32
fdthierry Messages postés 106 Date d'inscription lundi 24 novembre 2003 Statut Membre Dernière intervention 27 septembre 2019 - 4 avril 2005 à 15:15
Bonjour à tous,

J'ai pris le code proposé à cette adresse http://www.aspfr.com/code.aspx?ID=8673, ça fonctionne très bien.
Je souhaite mettre une restriction de type de fichier par extension.
J'ai l'idée en tête:

J'ai une variable avec les extensions autorisées, je fais un split et je compare par rapport à l'extension du fichier uploadés dans la function LetsGOOOO et je fais une sortie si l'extension n'est pas dans ma liste.
Mais je n'arrive pas à récupérer mon extension assez tot pour le faire.
J'arrive à la récupérer dans la fonction SauveFichier et dans la propriété ExtensionFichier mais elle ne sont exploitables qu'après Upl2ADO !
Auriez vous une idée, je coince.

Merci,
Amicalement,
Thierry

10 réponses

cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
2 avril 2005 à 01:29
Salut,

En fait tu peux utiliser un javascript pour contrôler l'extension du fichier avant d'uploader celui-ci.

Voici un example de javascript qui t'affiche l'extension (en fait ça affiche les charactères après le dernier . trouvé).
<html>
<head>
<title>Test upload</title>
<script language="Javascript">
function testExt(){
var sFilename = document.maform.matextbox.value;
var temp = new Array();
var sExtension = '';


if (sFilename.indexOf('.')==-1){
alert('. not found'); //pas de point, pas de submit..on peut arrêter ici
}else{
//trim du text
alert('>' + sFilename + '<');
sFilename = sFilename.replace(/(^\s*)|(\s*$)/g,"");
alert('>' + sFilename + '<');

temp = sFilename.split('.');


sExtension = temp.pop().toString();
alert('Extension >' + sExtension + '<');

//maintenant tu as l'extension, tu peux la comparer avec un tableau d'extensions autorisées.
}


}
</script>
</head>


<form name="maform" id="maform" action="" method="post">




</form>

</html>

Avec ca tu devrais t'en sortir.. . (tu ajoutes un tableau javascript avec la liste des extensions autorisées, tu check si l'extension est dans la liste, si oui -> form.submit, sinon ...bein pas submit).

N'hésites pas si tu as besoin de plus de détails.

yopyop
3
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
1 avril 2005 à 16:04
C'est normal tu fais ta vérification coté serveur, donc une fois que l'upload est faites ...



Va falloir passé par javascript, et la je n'ai aucune idée du comment
qu'on peut faire ni meme du comment recuperer le fichier... mais ca
doit etre possible. Regarde du coté de javascriptfr.com



Mais bon, dans la plupart des cas c'est pas derangeant, sauf si tu
envoies de gros fichiers ... et la je n'ai aucune solution à te
proposer, si ce n'est d'avertir le client.



Attention egalement à la facon dont tu recuperes l'extension, ce n'est
pas toujours évident, donc fait bien gaffe la dessus, surtout si
ensuite tu dois afficher les fichiers ...




<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
fdthierry Messages postés 106 Date d'inscription lundi 24 novembre 2003 Statut Membre Dernière intervention 27 septembre 2019
1 avril 2005 à 17:28
J'ai trouvé ce code qui permet de récupérer mon nom de fichier envoyé:

Dim Contenu, TailleContenu, PosFinFic, PosDebutCont, PosFinCont, PosDebutFic2, PosFinFic2, X, Y, Position
Dim LimitASCII, LimitBin, PosDebutFic, NomFichier


Contenu = Request.BinaryRead(Request.TotalBytes)
TailleContenu = Request.TotalBytes


PosDebutFic=0
PosFinFic=0
PosDebutCont=0
PosFinCont=0
PosDebutFic2=0
PosFinFic2=0


X = 0
Y = 1
Position = 1
LimitASCII = "filename=" & chr(34)
LimitBin=""
for Z = 1 to Len(LimitASCII)
LimitBin = LimitBin & chrB(ASCB(Mid(LimitASCII, Z, 1)))
next
PosDebutFic = InstrB(1, Contenu, LimitBin)
if PosDebutFic <> 0 then
PosDebutFic = PosDebutFic + LenB(LimitBin)
end if
LimitASCII = "Content-Type:"
LimitBin=""
For Z = 1 to Len(LimitASCII)
LimitBin = LimitBin & chrB(ASC(Mid(LimitASCII, Z, 1)))
next
PosDebutCont = InstrB(1, Contenu, LimitBin)
if PosDebutCont <> 0 then
PosFinFic = PosDebutCont - 3
PosDebutCont = PosDebutCont + LenB(LimitBin)
end if
NomFichier = MidB(Contenu, PosDebutFic , (PosFinFic - PosDebutFic)) ' ******
ContenuAscii = ""
for Z = 1 to LenB(NomFichier)
ContenuAscii = ContenuAscii & chr(ASC(MidB(NomFichier, Z, 1)))
next
NomFichier = ContenuAscii


Ca coince en fait à la ligne ou j'ai mis ******, j'ai fait des tests et en fait, le LimitBin me retourne ceci ?????????
Plutôt bizarre !
Car si j'arrive à le faire avec ça, je n'ai plus qu'à faire un :
strExt = Right(NomFichier,3) ' :o))

Amicalement;
Thierry
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
2 avril 2005 à 01:47
oui mais la tu te sert d'un input type="text" alors qu'il faudrais
plutot un input type="file" j'ai pas testé le code, mais je sais pas si
on peut recuperer aussi facilement le text d'un input type="file" ....
a tester.



Sinon merci pour ce code, ca peut etre très utile :) de plus je connais pas la fonction pop() de javascript (sExtension = temp.pop().toString();
) qui a l'air de donner la derniere occurence d'un tableau.




<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
2 avril 2005 à 18:02
re,

cela fonctionne également avec un input de type file ,et la fonction pop retourne bien la dernière valeur du tableau ...

en ce qui me concerne, c'est surtout la regex que j'utilise le plus afin de déterminer si un input est bien remplis ou non (sFilename = sFilename.replace(/(^\s*)|(\s*$)/g,""); ). En gros, cela équivaut au Trim de vbscript (ps: elle n'est pas de moi.... ).

J'ai fait une plétore d'applications en asp+javascript, et maintenant que je code en asp.net (+vb.net ... beurk), je trouve très utile de connaître le javascript... cela évite les post back trop nombreux à mon goût... (et le viewstate qui est complètement inutilisable à moins d'utiliser des fonctions de compression....)...bref je méloigne :-)
yopyop
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
2 avril 2005 à 18:30
Ca fait plaisir d'entendre des personnes dire que Javascript et NECESSAIRE !!!



J'entends trop souvent dire que certains developpeur veulent plus faire
de javascript etc... c'est vrai que c'est tellement facile de faire un
postback ... :(



Mais javascript à lui seul ne suffit pas ! Il s'execute coté client
donc on peut faire ce qu'on veut avec ... il est également
indispensable de faire les vérification coté serveur ensuite. Mais
Javascript évite beaucoup de postback inutile ...



Mais comme tu le dis, on s'éloigne un peu du sujet la ;)

<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
2 avril 2005 à 18:37
sûr :-)
faudrait faire un topic philosophie .net

bon weekend

yopyop
0
fdthierry Messages postés 106 Date d'inscription lundi 24 novembre 2003 Statut Membre Dernière intervention 27 septembre 2019
4 avril 2005 à 11:59
juste une tite question, étant nul en javascript :o)
Pour comparer dans un tableau, ça se passe comment?

Je suppose que je déclare un array du style à la suite de ton code :

var sExt = New Array();
var ctrlExt = '';
var sMatch=0

sExt = 'txt,csv'; //Liste des extensions autorisées
crtlExt = sExt.split(',');

Ensuite je coince un peu,:
for (i =0; ubound(ctrlExt); i++)
{if (ctrlExt(i) = sExtension)
strMatch=1; // extension autorisée
exit if; // est ce possible de quitter la boucle si strMatch = 1 ?
}
else
{
strMatch = 0;
}
if (strMatch=0)
{ alert('Ce type de fichier n'est pas autorisée');

J'ai surement des erreurs, qu'en penses tu?
J'ai cru comprendre que tu connaissais le javascript, sinon je poserais ma question sur un forum javascript ;o)

Merci de ton aide,
Amicalement,
Thierry
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
4 avril 2005 à 14:23
<script language="Javascript">
function testExt(){
var sFilename = document.maform.matextbox.value;
var temp = new Array();
var sExtension = '';
var sExtensionOk = 'TXT,CSV';


if (sFilename.indexOf('.')==-1){
alert('. not found'); //pas de point, pas de submit..on peut arrêter ici
}else{
//trim du text
alert('>' + sFilename + '<');
sFilename = sFilename.replace(/(^\s*)|(\s*$)/g,"");
alert('>' + sFilename + '<');

temp = sFilename.split('.');
sExtension = temp.pop().toString();
alert('Extension >' + sExtension + '<');

//maintenant tu as l'extension, tu peux la comparer avec un tableau d'extensions autorisées.
//
if (sExtensionOk.indexOf(sExtension.toUpperCase())<0){
// pas dans la liste
alert('extension non authorisée');
}

}


}

essaies un truc du genre... ca devrai fonctionner.
yopyop
0
fdthierry Messages postés 106 Date d'inscription lundi 24 novembre 2003 Statut Membre Dernière intervention 27 septembre 2019
4 avril 2005 à 15:15
Merci bcp,

de mon côté je viens de trouvr ceci ;o)

function verifExt()
{
if ( frmUpload.txtFile.value!='' )
{
var sFilename = document.frmUpload.txtFile.value;
var temp = new Array();
var sExtension = '';
sFilename = sFilename.replace(/(^\s*)|(\s*$)/g,"");
temp = sFilename.split('.');
sExtension = temp.pop().toString();
document.frmUpload.txtExt.value='ext:'+sExtension;
var tblExt = new Array('txt','csv');
var ctrlExt = '';
var sMatch=0;
var lngtblExt = tblExt.length-1;
var i = 0
do
{
if (tblExt[i]==sExtension)
{sMatch=1};
i++
}
while (i <= lngtblExt)
if (sMatch==0)
{
alert('Ce type de fichier n\'est pas autorisée');
return false;
}
else
{
return true;
}
}
}

Amicalement
Thierry
0
Rejoignez-nous