Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Langages serveur > ASP
ASP Forum sur la programmation ASP. Avant de poster : Cours ASP, FAQ ASP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/06/2007, 11h39   #1
Invité de passage
 
Inscription : juin 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 3
Points : 1
Points : 1
Par défaut appendchunk : double la taille du fichier.

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.
guillaume1981 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 09h04   #2
Invité de passage
 
Inscription : juin 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 3
Points : 1
Points : 1
Par défaut Code utilisé pour avoir ce résultat

'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
guillaume1981 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2007, 14h58   #3
Invité de passage
 
Inscription : juin 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 3
Points : 1
Points : 1
Par défaut asciiTObinaire

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
guillaume1981 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h13.


 
 
 
 
Partenaires

Hébergement Web