Cette source sert a résoudre le pb que j'ai rencontré lors d'un upload sans composant.
En effet, les différentes sources du net passent toutes par Request.BinaryRead ce qui empeche ensuite de faire Request.Form et c'est tres génant si le formulaire ne servait pas qu'a upload et contenait des champs textes.
La fonction permet donc de retrouver la valeur d'un champ texte au milieu des données obtenu par BinaryRead et donc de pouvoir faire l'upload tout en retrouvant les infos du formulaire.
Certains vont peut etre trouver ca bourrin mais bon je ne pouvais pas passez par un composant et je ne voulais pas faire l'upload dans un formulaire à part. Et puis j'ai vu que d'autre avaient eu le meme pb mais que personne n'y avait proposé de solution (ou sinon j'ai pas trouvé).
Pour ce qui est du code en lui meme, vous m'excuserez, j'avais jamais toucher à l'asp et au formulaire avant avant-hier...
Source / Exemple :
'on récupere le contenu du formulaire en binaire
Contenu = Request.BinaryRead(Request.TotalBytes)
'************************************************************************
'LE FORMULAIRE SUIVANT :
'<FORM METHOD="Post" ENCTYPE="multipart/form-data" ACTION="upload.asp">
'<INPUT TYPE="submit" NAME="Enter" Value="UPLOAD">
'<INPUT TYPE="file" NAME="FileTO" size="50">
'</FORM>
'************************************************************************
'RETOURNE PAR BINARYREAD :
'-----------------------------7d037a33e8
'Content-Disposition: form-data;
'name="Enter" UPLOAD
'-----------------------------7d037a33e8
'Content-Disposition: form-data;
'name="FileTO";
'filename="C:\Mes documents\Test.txt"
'Content-Type: text/plain
'bla bla bla Contenu de Test.text bla bla bla
'-----------------------------7d037a33e8—
'************************************************************************
'fonction retournant la valeur dun champ texte
'recu d'un formulaire lu par BinaryRead
public function getValue(Contenu,var)
PosDebutValue=0
getValue=""
'marqueur de debut
LimitASCII = "name=" & chr(34) & var & chr(34)
LimitBin=""
for i = 1 to Len(LimitASCII)
LimitBin = LimitBin & chrB(ASC(Mid(LimitASCII, i, 1)))
next
'position marqueyr de debut
PosDebutValue = InstrB(1, Contenu, LimitBin)
'si on trouve le marqueur
if PosDebutValue <> 0 then
'position debut de la valeur
PosDebutValue = PosDebutValue + LenB(LimitBin)
'marqueur de fin
LimitASCII = "-----"
LimitBin=""
For i = 1 to Len(LimitASCII)
LimitBin = LimitBin & chrB(ASC(Mid(LimitASCII, i, 1)))
next
'position marqueur de fin
PosFinValue = InstrB(PosDebutValue, Contenu, LimitBin)
'position fin de la valeur
PosFinValue = PosFinValue - 2
'recuperation valeur
valBin = MidB(Contenu, PosDebutValue , (PosFinValue - PosDebutValue))
getValue = ""
for i = 1 to LenB(valBin)
getValue=getValue & chr(ASCB(MidB(valBin, i, 1)))
next
getValue=Right(getValue,Len(getValue)-4)
end if
end function
'fonction qui permet d'uploader
'source : http://www.asp-magazine.com/fr/asp/blitz/blitz10.asp
'Contenu : Contenu du post du formulaire en binaire
'Retourne le nom du fichier uploader
function upload(Contenu)
'recuperation de la taille
TailleContenu = Request.TotalBytes
PosDebutFic=0
upload=""
'marqueur pour recuperer le nom du fichier
LimitASCII = "filename=" & chr(34)
'conversion en binaire
LimitBin=""
for i = 1 to Len(LimitASCII)
LimitBin = LimitBin & chrB(ASC(Mid(LimitASCII, i, 1)))
next
'recuperation de la position du marqueur
PosDebutFic = InstrB(1, Contenu, LimitBin)
'si le marqueur est présent (sinon pas de fichier a uploader)
if PosDebutFic <> 0 then
'debut du nom de fichier
PosDebutFic = PosDebutFic + LenB(LimitBin)
'marqueur de fin de nom
LimitASCII = "Content-Type:"
'conversion en binaire
LimitBin=""
For i = 1 to Len(LimitASCII)
LimitBin = LimitBin & chrB(ASC(Mid(LimitASCII, i, 1)))
next
'position de fin du nom
PosDebutCont = InstrB(1, Contenu, LimitBin)
PosFinFic = PosDebutCont - 3
'nom du fichier en binaire
NomFichierBin = MidB(Contenu, PosDebutFic , (PosFinFic - PosDebutFic))
'conversion en ASCII
NomFichierAscii = ""
for i = 1 to LenB(NomFichierBin)
NomFichierAscii = NomFichierAscii & chr(ASCB(MidB(NomFichierBin, i, 1)))
next
'si c'est bien un jpg
if (Right(NomFichierAscii,4)=".jpg" or Right(NomFichierAscii,4)=".JPG") then
'position de debut des datas
PosDebutCont = PosDebutCont + LenB(LimitBin)
PosFinCont = InstrB(PosDebutCont, Contenu, chrB(13))
PosDebutData = PosFinCont + 4
'marqueur de fin des datas
LimitASCII= "----"
'conversion en binaire
LimitBin=""
for i = 1 to Len(LimitASCII)
LimitBin = LimitBin & chrB(ASC(Mid(LimitASCII, i, 1)))
next
'position de fin de data
PosFinData= InstrB(PosDebutData, Contenu, LimitBin) -2
'recuperation des datas
DataFichier = MidB(Contenu, PosDebutData , (PosFinData - PosDebutData))
'recuperation du nom de fichier
upload = right(NomFichierAscii, (Len(NomFichierAscii) - InstrRev(NomFichierAscii, "\")))
'creation du fichier sur le serveur
Set FSO = Server.CreateObject("Scripting.FileSystemObject")
Set Out=FSO.CreateTextFile( Server.MapPath("\Temp") & "\" & upload , True)
'copie des datas
For i = 1 to LenB(DataFichier)
Out.Write chr(AscB(MidB(DataFichier,i,1)))
Next
'fermeture du fichier
Out.close
Set Out=nothing
end if
end if
end function
Conclusion :
Voila :o)
J'ai pas encore tout tester mais ca marche pour ce que je veux en faire...
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.