Archive pour décembre 2012

VBScript upload de fichier

Mercredi 19 décembre 2012

La plupart des exemples sur internet utilise la méthode put pour envoyer des fichiers en upload sur un serveur web. Voici un script qui permet de le faire avec Content-Disposition: form-data.
[sourcecode language="vb"]Function UploadFile( url, file, fileType )

Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")

Dim boundary
boundary = "12345678"

Set objStream = CreateObject("ADODB.Stream")
objStream.Type = 1 ‘ binary
objStream.Open
objStream.LoadFromFile(file)

‘Stream de text
Set sOut = CreateObject("ADODB.Stream")
sOut.Charset = "us-ascii"
sOut.Type = 2 ‘ Text
sOut.Open
sOut.WriteText "–" & boundary & vbCrLf
sOut.WriteText "Content-Disposition: form-data; name=""file""; filename="""&file&"""" & vbCrLf
sOut.WriteText "Content-Type: " & fileType & vbCrLf & vbCrLf

Set sOut2 = CreateObject("ADODB.Stream")
sOut2.Charset = "us-ascii"
sOut2.Type = 2 ‘ Text
sOut2.Open
sOut2.WriteText vbCrLf & "–" & boundary & "–" & vbCrLf & vbCrLf

Set sAll = CreateObject("ADODB.Stream")
sAll.Type = 1 ‘binary
sAll.Open
sOut.Position = 0
sOut.CopyTo sAll
objStream.CopyTo sAll
sOut2.Position = 0
sOut2.CopyTo sAll

oXMLHTTP.Open "POST", url, False
oXMLHTTP.setRequestHeader "Content-Type", "multipart/form-data; boundary=" & boundary
oXMLHTTP.setRequestHeader "Connection", "close"
oXMLHTTP.setRequestHeader "Content-length", sAll.Size
sAll.Position = 0
oXMLHTTP.Send sAll.Read()
Wscript.Echo "Upload-Status: " & oXMLHTTP.statusText
End Function

UploadFile "http://upload.server/upload.php", "Configurations.zip", "application/x-zip-compressed"[/sourcecode]