Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CONVERTIR RAPIDEMENT UN FICHIER UPLOADÉ (IMAGE) ET OBTENIR LES VALEURS DES CLEFS (CONVERTBIN2ASCII)


Information sur la source

Catégorie :Formulaires Classé sous : convertir, fichier, upload, valeurs, clé Niveau : Initié Date de création : 09/05/2005 Date de mise à jour : 11/05/2005 13:17:03 Vu : 8 704

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

Description

Bonjour TLM...
Voilà un petit bout de code qui permet de retrouver les valeurs des clefs dans une variable de type binaire qui aurait été initialisée par exemple:

MyBinData=Request.BinaryRead(Request.TotalBytes)

Ensuite la function GetKeyVal te permet d'extraire les valeurs, pratique lorsque l'on pousse une image et que l'on a posté d'autres valeurs, comme un commentaire, ou une date.

Pourquoi pratique? Le fait d'utiliser Request.BinaryRead empêchera ensuite toute utilisation de Request.Form et vice et versa...
 

Source

  • function ConvertBin2Ascii(BinData)
  • 'On Error Resume Next
  • Dim MonObjRs
  • Set MonObjRs = CreateObject("ADODB.Recordset")
  • MonObjRs.Fields.Append "TmpBin", 201, lenB(BinData)
  • MonObjRs.Open
  • MonObjRs.AddNew
  • MonObjRs("TmpBin").AppendChunk BinData
  • MonObjRs.Update
  • ConvertBin2Ascii= MonObjRs("TmpBin")
  • MonObjRs.Close
  • Set MonObjRs = Nothing
  • End function
  • Function GetKeyVal(Key,Default,MyAsciiData)
  • HeaderCode=left(MyAsciiData,instr(1,MyAsciiData,vbcrlf,0)-1)
  • If InStr(1, MyAsciiData, "name=""" & Key & """", 0)>0 Then
  • pos=InStr(1, MyAsciiData, "name=""" & Key & """", 0)+Len("name=""" & Key & """")+4
  • getKeyVal=Mid(MyAsciiData,pos,InStr(pos-1,MyAsciiData, HeaderCode,0)-pos-2)
  • Else
  • getKeyVal=Default
  • End If
  • End Function
  • Function GetFileName(AsciiData)
  • pos = InStr(1, AsciiData, "filename=", 0) + 10
  • begin = pos
  • DO
  • theChar = Mid(AsciiData,pos,1)
  • IF theChar = """" THEN EXIT DO
  • IF theChar = "/" OR theChar = "\" THEN begin = pos+1
  • pos = pos + 1
  • LOOP
  • GetFileName = Mid(AsciiData, begin, pos-begin)
  • End Function
  • Function GetImageData(AsciiData)
  • firstReturnPos = InStr(1,AsciiData,vbCrLf,0)
  • doubleReturnPosition = InStr(InStr(1,AsciiData,"filename=",0),AsciiData, vbCrLf & vbCrLf,0)
  • FileSize = Len(AsciiData) - doubleReturnPosition - firstReturnPos - 8
  • GetImageData = Mid(AsciiData, doubleReturnPosition+4, FileSize)
  • End Function
  function ConvertBin2Ascii(BinData)
    'On Error Resume Next
    Dim MonObjRs
    Set MonObjRs = CreateObject("ADODB.Recordset")
    MonObjRs.Fields.Append "TmpBin", 201, lenB(BinData)
    MonObjRs.Open
    MonObjRs.AddNew
    MonObjRs("TmpBin").AppendChunk BinData
    MonObjRs.Update
    ConvertBin2Ascii= MonObjRs("TmpBin")
    MonObjRs.Close
    Set MonObjRs = Nothing
  End function

  Function GetKeyVal(Key,Default,MyAsciiData)
    HeaderCode=left(MyAsciiData,instr(1,MyAsciiData,vbcrlf,0)-1)
    If InStr(1, MyAsciiData, "name=""" & Key & """", 0)>0 Then
      pos=InStr(1, MyAsciiData, "name=""" & Key & """", 0)+Len("name=""" & Key & """")+4
      getKeyVal=Mid(MyAsciiData,pos,InStr(pos-1,MyAsciiData, HeaderCode,0)-pos-2)
    Else
      getKeyVal=Default
    End If
  End Function


  Function GetFileName(AsciiData)
    pos = InStr(1, AsciiData, "filename=", 0) + 10
    begin = pos
    DO
      theChar = Mid(AsciiData,pos,1)
      IF theChar = """" THEN EXIT DO
      IF theChar = "/" OR theChar = "\" THEN begin = pos+1
      pos = pos + 1
    LOOP
    GetFileName = Mid(AsciiData, begin, pos-begin)
  End Function

  Function GetImageData(AsciiData)
    firstReturnPos = InStr(1,AsciiData,vbCrLf,0)
    doubleReturnPosition = InStr(InStr(1,AsciiData,"filename=",0),AsciiData, vbCrLf & vbCrLf,0)
  
    FileSize = Len(AsciiData) - doubleReturnPosition -  firstReturnPos - 8
    GetImageData = Mid(AsciiData, doubleReturnPosition+4, FileSize)
  End Function

Conclusion

Juste une précision il est important et nécessaire que l'image proprement dite soit en dernière position lors du postage du form sinon le code retrouvera pas les données de l'image.

On peut s'amuser à imbriquer le tout comme suit:

'Initialise la variable
    MyAsciiData=ConvertBin2Ascii(Request.BinaryRead(Request.TotalBytes))

'Obtenir les autres clefs
    pSubject = (GetKeyVal("Subject","MaValeurParDefaut",MyAsciiData))
    pAuthor = (GetKeyVal("Author","",MaValeurParDefaut,MyAsciiData))
    pComments = (GetKeyVal("Comments","",MaValeurParDefaut,MyAsciiData))

'Sauver l'image
    Set fs=Server.CreateObject("Scripting.FileSystemObject")  
    Set file = fs.CreateTextFile(Server.MapPath(".") & "\MonSousRepertoireSurLeServeur\" & GetFileName(MyAsciiData), false)
    file.write GetImageData(MyAsciiData)
    file.close
              
    Set file = Nothing
    Set fs = Nothing


Vouala c'est tout ! Une bonne partie viens de ce site, mais je remarque encore que des programmeurs mettent des exemples de conversion de bin to ascii fait avec une boucle, affreusement lent et au dessus de 150ko on passe gentiment à un processus qui dure plus d'une minute..;-(
 

Historique

11 mai 2005 13:17:03 :
Une erreur s'était glissée dans la fonction GetKeyVal... Merci à Alain pour la possibilité de rééditer le code... (Pas vu l'option) Au cas où le résultat peu se voir sur le site de www.clubalbatros.ch (Lien "upload")

Commentaires et avis

signaler à un administrateur
Commentaire de ObelixSuisse le 10/05/2005 19:33:43

Désolé c'est encore moi !
Une grosse erreur s'est glissée dans la fonction GetKeyVal, à qui la faute ? Au copier coller !
Vouala la bonne !

    Function GetKeyVal(Key,Default,MyAsciiData)
      HeaderCode=left(MyAsciiData,instr(1,MyAsciiData,vbcrlf,0)-1)
    If InStr(1, MyAsciiData, "name=""" & Key & """", 0)>0 Then
        pos=InStr(1, MyAsciiData, "name=""" & Key & """", 0)+Len("name=""" & Key & """")+4
        getKeyVal=Mid(MyAsciiData,pos,InStr(pos-1,MyAsciiData, HeaderCode,0)-pos-2)
    Else
        getKeyVal=Default
    End If
    End Function

signaler à un administrateur
Commentaire de Alain Proviste le 10/05/2005 23:06:41 administrateur CS

sais tu que tu peux éditer ton code ?
:)

signaler à un administrateur
Commentaire de ObelixSuisse le 11/05/2005 13:09:20

Salut Alain...
Merci je n'avais pas vu cette option ;-)

signaler à un administrateur
Commentaire de AliBabNet le 07/06/2006 16:09:27

Impeccable!

Bravo et merci Obelix, c'est le seul code valable et efficace que j'aie trouvé pour récupérer un upload + des champs de formulaire.

Avis aux visiteurs: foncez, c'est du bon! ;)

signaler à un administrateur
Commentaire de arcade205 le 21/12/2006 11:22:10

Bonjour,

un grand merci pour ta source, les fonctions ConvertBin2Ascii() & GetKeyVal() me sont utiles à merveille !

Aligato.

signaler à un administrateur
Commentaire de arcade205 le 22/12/2006 08:32:34

Bonjour à tous,

Je me suis permis de modifier la fonction GetKeyVal() car il lui manquait un p'ti quelque chose ...

En fait, comment fait'on si on a plusieurs valeurs pour la même Key ??? On boucle ;-)
Me direz vous, c'est idiot d'avoir plusieurs input dans un formulaire ayant le même nom ?!
Eh bien, je ne parle pas de ce cas mais si vous utilisez un liste à choix multiple, vous serez bien embêté de récupérer que la 1ère valeur ...

Donc j'ai juste ajouté une boucle & quelques commentaires :

Function GetKeyVal(psKey, psDefault, psMyAsciiData)
Dim lsRet : lsRet = ""
Dim lsMyAsciiData : lsMyAsciiData = psMyAsciiData
Dim lsHeaderCode : lsHeaderCode = Left(lsMyAsciiData, InStr(1, lsMyAsciiData, vbcrlf, 0) - 1)
Dim liPos : liPos = 0
Dim liBegin : liBegin = 0
Dim liCutData : liCutData = 0
Dim lbGo : lbGo = False

'On parcourt récursivevement lsMyAsciiData
Do While Not lbGo
  liBegin = InStr(1, lsMyAsciiData, "name=""" & psKey & """", 0)     'On recherche notre Key

  If liBegin > 0 Then                'Si on trouve notre Key
   liPos = liBegin + Len("name=""" & psKey & """") + 4        'Position de début

   liCutData = InStr(liPos - 1, lsMyAsciiData, lsHeaderCode, 0) - liPos - 2  'On récupère la taille de la valeur de notre Key

   lsRet = lsRet & Mid(lsMyAsciiData, liPos, liCutData) & ", "      'On extrait la valeur de Key

   lsMyAsciiData = Right(lsMyAsciiData, Len(lsMyAsciiData) - (liPos + liCutData)) 'On supprime la 1ère valeur de notre Key
  Else
   lbGo = True                 'Sinon on sort de la boucle
  End If
Loop

'On supprime le dernier ', ' sinon on renvoie la valeur par défault
If lsRet <> "" Then lsRet = Left(lsRet, Len(lsRet) - 2) Else lsRet = psDefault

GetKeyVal = lsRet
End Function

& encore merci à ObelixSuisse pour cette fonction de base.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Upload Nix [ par Clem ] Pui je utiliser ton upload pour mon site que je suis en train de faire sur la programmation (Vb,C++,Qb,ASP,Javascript,API,VRML) ?Et comment faire pour upload [ par rico ] je monte un site avec une base de donnée access possedant un objet ole, 3 problèmes se posent à moi :1__ pouvoir réaliser un upload du fichier sélecti pour nix à propos de upload 2.0 [ par bernard ] Salut Nix,Tout d'abord merci pour le code, je l'utilise actuellement pour uploader 1 fichier attaché depuis mon site dans le cadre d'un dépot de CV en Vérification du type de la donnée [ par Psy ] slt à tous, voila mon pb : A partir d'un formulaire, le client m'upload un fichier mais j'aimerais verifier avant l'upload que le fichier est bien du Vérifier la taille d'un fichier avant l'upload [ par Dura ] BonjourJ'ai un petit prob,Dans un formulaire classique, il y a un champ "image" = upload!Je vérifie tous les champs sauf la taille du fichier à upload Création d'un fichier Texte [ par AuSuperProgramme ] J'ai un sérieux problème lors de la création d'un fichier en reprenant des valeurs depuis un textbox pour le nom de fichier et un textarea pour le con Lister un répertoire sur un serveur [ par Nabel ] Bonjour, bonjour,Voilà le pb : ma page asp permet d'uploader des fichiers sur le serveur, mais qd j'upload un fichier qui a le même nom qu'un fichier Upload de fichier automatique, GALERE [ par vincentp ] Bonjour à tous,Mon projet est d'envoyer des fichiers sur internet avec VB6 sans passer par le ftp. Sur ce site je peux créer des pages ASP et donc réc problème d'upload [ par legoland ] Salut à tous,J'utilise AspSmartUpload et lorsque j'uploade mon fichier sur le serveur sof que le fichier créé pèse 1ko et ne peux pas être lu. Pourtan upload [ par Arkane ] J'ai construit un formulaire d'upload (avec un basile FILE !) et je voudrais dans mon traitement formulaire récupérer le nom du fichier que j'ai envoy


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,328 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.