|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : juin 2007 Messages : 3 ![]() |
Je cherche à uploader un fichier (de type pdf, image ou autre) à partir d'un formulaire et à l'afficher sur la page d'aprés.
J'utilise pour celà le mécanisme du formulaire de type "multipart/form-data" dans mon premier formulaire, ainsi que la fonction appendchunk pour récupérer le contenu des fichiers. Le problème que je rencontre vient du fait que le fichier récupéré est plus gros du double de la taille du fichier original. Quand j'ouvre ces deux fichiers dans un éditeur hexadécimal, je me rend compte que le fichier généré dispose de la même combinaison d'octet que l'orignal mais à chaque octet est associé un autre octet n'ayant rien à voir. ex : -original 25 50 44 46 2D 31 2E.... -fichier généré 25 00 50 00 44 00 46 00 2D 00 31 00 2E 00.... Je suis sur ce problème depuis plusieurs jour, si vous avez une solution je suis preneur, n'hésitez pas à me recontacter pour tout complément d'information. PS: Si aucune solution "propre" n'existe, comment puis je récupérer un octet sur deux. |
|
|
00
|
|
|
#2 |
|
Invité de passage
![]() Inscription : juin 2007 Messages : 3 ![]() |
'Cette fonction ajoute les données au format binaire dans un objet Recordset
'de façon à ce qu'elles deviennent "manipulables" simplement 'Elle renseigne donc l'attribut "envoiTotal" de l'objet Upload Private function uploadToAdo() On error resume next Const adLongVarBinary = 201 '201 dim RS set RS=Server.CreateObject("ADODB.Recordset") RS.Fields.Append "tmpBin",adLongVarBinary,ficBinTaille RS.Open RS.AddNew RS("tmpBin").AppendChunk ficBin RS.Update 'RS.Save "C:\test.txt", adPersistADTG envoiTotal=RS("tmpBin") RS.Close set RS = Nothing if Err.number <> 0 then call gererErr(escape("Erreur lors de l'upload du/des fichier(s)"),"") end if End function 'Cette fonction appelle la fonction uploadToADO et "parse" le contenu de l'objet ADO 'de façon à obtenir l'ensemble des propriétés des éléments contenus dans la requête POST 'et à remplir ainsi les différents tableaux attributs de la classe Upload Private function parseBin() dim limites, limitesPos dim cptFic dim debDernierFic, finDernierFic dim dernierFic dim nomFic dim ficCourant dim debNomFic, finNomFic dim nomInput dim estFichier dim contentType dim debFic, finFic, donneesFic dim tailleFic if ficBinTaille > 0 then call uploadToAdo 'Entête HTTP limites = HttpContentType 'On initialise le compteur de fichier(s) cptFic=0 'On cherche les limites (boundaries) limitesPos=InStr(1,limites,"boundary=") + 8 limites="--" & Right(limites,Len(limites) - limitesPos) 'On cherche le 1er fichier debDernierFic=InStr(1,envoiTotal,limites) finDernierFic=InStr(debDernierFic + 1, envoiTotal, limites) - 1 dernierFic=False Do While dernierFic=False ficCourant=Mid(envoiTotal,debDernierFic,finDernierFic-debDernierFic) debNomFic=InStr(1,ficCourant,"filename=") + 10 finNomFic=Instr(debNomFic,ficCourant,Chr(34)) 'On vérifie que le champ n'est pas vide if debNomFic <> finNomFic then 'On récupère le(s) nom(s) du/des champ(s) input du formulaire nomInput=InStr(1,ficCourant,"name=""") if nomInput > 0 then nomInput=Mid(ficCourant, nomInput +6, InStr(nomInput + 6, ficCourant,"""") - nomInput - 6) End if AjoutNomForm=nomInput 'On récupère le nom du fichier (distant) puis on extrait juste le nom du fichier nomFic=InStr(1,ficCourant, "filename=""") estFichier=False if nomFic > 0 then estFichier=True nomFic=Mid(ficCourant,nomFic + 10, InStr(nomFic + 10, ficCourant,"""") - nomFic -10) end if 'On vérifie que cet "input" contienne un fichier if estFichier=True then cptFic=cptFic + 1 AjoutCheminDistant=nomFic nomFic=Right(nomFic, Len(nomFic) - inStrRev(nomFic,"\")) 'On repère le début du fichier qui se trouve après le Content-Type contentType=InStr(1,ficCourant,"Content-Type:") if contentType >0 then debFic=InStr(contentType, ficCourant , vbCrLf) + 4 End if finFic=Len(ficCourant) 'Calcul de la taille du fichier tailleFic=finFic - debFic 'On récupère le fichier donneesFic=Mid(ficCourant, debFic,tailleFic) AjoutFichier=donneesFic AjoutNomFichier=nomFic AjoutTailleFichier=Len(donneesFic) Else 'Récupération des valeurs tapées dans des champs de type text, 'textArea, radioButton, checkBox... debFic=InStr(InStr(1,ficCourant,"name=""") + 6, ficCourant, """") + 5 finFic=Len(ficCourant) 'Calcul de la taille du texte tailleFic=finFic - debFic 'On récupère le texte donneesFic=Mid(ficCourant, debFic, tailleFic) AjoutChampNOM = nomInput AjoutChampTXT = donneesFic End if End if 'On va au fichier suivant 'On repère le début et la fin du fichier suivant debDernierFic=InStr(finDernierFic + 1, envoiTotal, limites) finDernierFic=InStr(debDernierFic +1,envoiTotal, limites) - 1 if not finDernierFic > 0 then dernierFic=True Loop nbFic=cptFic End if End function |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : juin 2007 Messages : 3 ![]() |
Après plusieur sjour de recherche, je viens de trouver la solution à mon problème :
' asciiTObinaire: Transforme une chaine binaire en chaine ASCII. function asciiTObinaire(chaine) Dim B, I For I=1 to len(chaine) B = B & ChrB(Asc(Mid(chaine,I,1))) Next asciiTObinaire = B End Function |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com