[Résolu] Upload Image via un site en VBA

EvilSakray

XLDnaute Nouveau
Bonjour,

Je cherche en VBA à accéder à une page web pour upload une image automatiquement.
Mon probleme est le suivant (j'utilise hapshack.com)
Le site demande l'emplacement de l'image avec une fonction onclick.

------------------------------------------------------------------------------------------------------

Edit: Après une journée de recherche, j'ai fini par comprendre que le problème venait de l'input "type = file" dans le formulaire.. :roll:

J'ai donc trouvé le code suivant (J'ai retiré le boundary) - j'ai obtenu la valeur a l'aide d'un module Firefox (LiveHTTPHeaders)

Code:
'******************* upload - begin
'Upload file using input type=file

Sub UploadFile(DestURL As String, FileName As String, _
  Optional ByVal FieldName As String = "File")
  Dim sFormData As String, d As String
  
  'Boundary of fields.
  'Be sure this string is Not In the source file
  Const Boundary As String = "---------------------------0123456789012"

  'Get source file As a string.
  sFormData = GetFile(FileName)
  
  'Build source form with file contents
  d = "--" + Boundary + vbCrLf
  d = d + "Content-Disposition: form-data; name=""" + FieldName + """;"
  d = d + " filename=""" + FileName + """" + vbCrLf
  d = d + "Content-Type: application/upload" + vbCrLf + vbCrLf
  d = d + sFormData
  d = d + vbCrLf + "--" + Boundary + "--" + vbCrLf
  
  'Post the data To the destination URL
  Call IEPostStringRequest(DestURL, d, Boundary)
End Sub

'sends URL encoded form data To the URL using IE
Sub IEPostStringRequest(URL As String, FormData As String, Boundary As String)
  'Create InternetExplorer
  Dim WebBrowser: Set WebBrowser = CreateObject("InternetExplorer.Application")
  
  'You can uncoment Next line To see form results
  WebBrowser.Visible = True
   
  'Send the form data To URL As POST request
  Dim bFormData() As Byte
  ReDim bFormData(Len(FormData) - 1)
  bFormData = StrConv(FormData, vbFromUnicode)

  WebBrowser.Navigate URL, , , bFormData, _
    "Content-Type: multipart/form-data; boundary=" + Boundary + vbCrLf

  Do While WebBrowser.busy
    DoEvents
  Loop
  'WebBrowser.Quit (Mise en commentaire de ma part)
End Sub

'read binary file As a string value
Function GetFile(FileName As String) As String
  Dim FileContents() As Byte, FileNumber As Integer
  ReDim FileContents(FileLen(FileName) - 1)
  FileNumber = FreeFile
  Open FileName For Binary As FileNumber
    Get FileNumber, , FileContents
  Close FileNumber
  GetFile = StrConv(FileContents, vbUnicode)
End Function
'******************* upload - end

Que j'appelle ainsi:

Code:
Sub TestUpload()
Dim PicLoc As String

PicLoc = "C:\test.png"
UploadFile "http://www.hapshack.com", _
  "C:\test.png", "fileup"
End Sub

...Mais ça ne marche pas, et le code me dépasse un peu pour être honnête.
Un peu d'aide pour comprendre et m'aider a le faire fonctionner sont les bienvenue, ou une alternative :p

Question supplémentaire:

Code:
Do While Not IE.ReadyState = 4
DoEvents
Loop

Bon code pour attendre que la page soit chargée ?

Merci d'avance de votre aide.
 
Dernière édition:

EvilSakray

XLDnaute Nouveau
Re : Upload Image via un site en VBA

Je n'avais rien mis en évidence car avait changé le message dans son intégralité :p
Le problème était le même, mais la façon dont je souhaitais le résoudre différente.

J'ai aussi au final trouvé la solution complètement au hasard hier après des heures et des heures de recherche.. et comme souvent c'était le genre de réponse qui nous font rougir de honte x)

Bref si un jour quelqu'un se retrouve coincé comme moi la solution:

Code de base:

Code:
  d = d + "Content-Type: application/upload" + vbCrLf + vbCrLf

Code modifié:

Code:
  d = d + "Content-Type: image/png" + vbCrLf + vbCrLf

Je laissais le Content-Type par défaut, alors qu'il fallait le spécifier dans ce cas manuellement. (C'est ce que j'en ai conclu vu que le problème a été résolu par cette simple modification).
 

Discussions similaires

Statistiques des forums

Discussions
312 111
Messages
2 085 396
Membres
102 882
dernier inscrit
Sultan94