begin process at 2010 02 09 20:29:57
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Formulaires

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

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


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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 :9 697

Auteur : ObelixSuisse

Ecrire un message privé
Site perso
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.T otalBytes)

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(Re quest.TotalBytes))

'Obtenir les autres clefs
    pSubject = (GetKeyVal("Subject","MaValeurParDefaut",MyAsciiDa ta))
    pAuthor = (GetKeyVal("Author","",MaValeurParDefaut,MyAsciiDa ta))
    pComments = (GetKeyVal("Comments","",MaValeurParDefaut,MyAscii Data))

'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")

 Sources de la même categorie

Source .NET (Dotnet) COMMENT FORMATER LE NOMBRE DE CARACTÈRES D'UN COLONNE DANS U... par PascalCmoa
Source avec une capture Source .NET (Dotnet) AJOUTER UNE IMAGE À UN BOUTON par PascalCmoa
Source avec Zip Source avec une capture Source .NET (Dotnet) UPLOADER PLUSIEURS FICHIERS AVEC BARRE DE PROGRESSION AJAX par clemox
Source avec Zip Source .NET (Dotnet) DATAGRID AVEC RECHERCHE ALPHABÉTIQUE par gatita_dev
Source avec Zip Source avec une capture Source .NET (Dotnet) IMAGE ANTI-BOT ET VALIDATION DE FORMULAIRES par badrbadr

 Sources en rapport avec celle ci

UPLOAD D'IMAGES VIA ADODB.STREAM ET SQL SERVER par Nicolas_kojack
TUTORIAL ASPSMARTUPLOAD (POUR AIDER CEUX QUI COMME MOI N'ONT... par ranouf
Source .NET (Dotnet) ASP.NET - CLASSE DE PASSAGE D'UN FICHIER XML (BASE64) VERS U... par fabrice69
Source avec Zip Source .NET (Dotnet) ASP.NET UPLOAD D'UN FICHIER DU PC CLIENT VERS VOTRE SITE par michelsto
Source avec Zip UPLOAD DE FICHIERS EN ASP SANS COMPOSANT par lelouperre

Commentaires et avis

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

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

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

Commentaire de ObelixSuisse le 11/05/2005 13:09:20

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

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! ;)

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.

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...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,326 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales