IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP Discussion :

appendchunk : double la taille du fichier.


Sujet :

ASP

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Points : 2
    Points
    2
    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.

  2. #2
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Points : 2
    Points
    2
    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

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Points : 2
    Points
    2
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Socket][Byte] Probleme d'envoi d'une taille de fichier
    Par Erok dans le forum Entrée/Sortie
    Réponses: 14
    Dernier message: 12/05/2009, 17h38
  2. Taille des fichiers Interbase et Firebird
    Par Equus dans le forum Débuter
    Réponses: 5
    Dernier message: 21/03/2005, 15h50
  3. [DOS] Obtenir la taille du fichier
    Par Amélie Ladoque dans le forum Windows
    Réponses: 2
    Dernier message: 15/02/2005, 12h33
  4. Taille de fichier
    Par nicolas.pissard dans le forum C++Builder
    Réponses: 2
    Dernier message: 10/11/2003, 16h24
  5. [langage] Problème de taille de fichier à mettre dans
    Par And_the_problem_is dans le forum Langage
    Réponses: 10
    Dernier message: 13/08/2002, 09h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo