Vom Prinzip her funktioniert ein MultiPart Request eigentlich genauso wie ein normaler Request auch, man muss einfach den Post-String, welches im LiveHttpHeaders angezeigt wird, nachbilden.
Da ich hier:
bereits ein Tutorial über WebRequest erstellt habe, werde ich in diesem Thread nicht mehr so genau darauf eingehen und alles detailiert erklären.Die Funktion für einen Upload könnte z.B. so aussehen:
PHP Code:
Public Function GetUploadResponse(ByVal url As String, ByVal upload As UploadData) As String
Dim boundary As String = Guid.NewGuid().ToString().Replace("-", "")
Dim request As HttpWebRequest = CType(HttpWebRequest.Create(url), HttpWebRequest)
request.Method = "POST"
request.ContentType = "multipart/form-data; boundary=" & boundary
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20100101 Firefox/15.0.1"
Dim PostData As New MemoryStream
With New StreamWriter(PostData)
.Write(("--" & boundary) & vbNewLine)
.Write("Content-Disposition: form-data; name=""{0}""; filename=""{1}""{2}", upload.FieldName, upload.FileName, vbNewLine)
.Write(("Content-Type: " & GetContentType(upload.FileName) & vbNewLine) & vbNewLine)
.Flush()
.Write(vbNewLine)
.Write("--{0}--{1}", boundary, vbNewLine)
PostData.Write(upload.Content, 0, upload.Content.Length)
.Flush()
End With
request.ContentLength = PostData.Length
Using s As Stream = request.GetRequestStream()
PostData.WriteTo(s)
End Using
PostData.Close()
Return New StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd()
End Function
PHP Code:
Structure UploadData
Dim Fieldname As String
Dim Filename As String
Dim Content As Byte()
Public Sub New(ByVal fieldname As String, ByVal filename As String, ByVal content As Byte())
Me.Fieldname = fieldname
Me.Filename = filename
Me.Content = content
End Sub
End Structure
PHP Code:
Public Function GetContentType(ByVal path As String) As String
Select Case New FileInfo(Path).Extension.ToLower()
Case ".bmp"
Return "image/bmp"
Case ".gif"
Return "image/gif"
Case ".jpe", ".jpeg", ".jpg"
Return "image/jpeg"
Case ".png"
Return "image/png"
Case ".svg"
Return "image/svg+xml"
Case ".tif", ".tiff"
Return "image/tiff"
Case Else
Return "application/octet-stream"
End Select
End Function

Unsere Anfrage wird also an
geschickt.Die nötigen Werte für den Post-String sind:
-----------------------------114782935826962
Dies wird automatisch in der GetUploadResponse-Funktion generiert (unsere "boundary"-Variable).
Content-Disposition: form-data; name="files[]"; filename="b.jpg"
files[] -> Fieldname (in unserer UploadData-Struktur)
b.jpg -> Filename (in unserer UploadData-Struktur)
Content-Type: image/jpeg
Dies erledigt unsere GetContentType-Funktion.
So, demnach würde unser Request folgendermaßen aussehen:
PHP Code:
//Beim Klick auf einen Button oder sonst was...
With New Http
Dim upload As New Http.UploadData("files[]", "PfadZumBild", File.ReadAllBytes("PfadZumBild"))
Dim html As String = .GetUploadResponse("http://epvpimg.com/upload/", upload)
End With
Nun können wir z.B. ganz einfach mit der Split-Funktion (gibt natürlich auch andere Möglichkeiten) den Wert für "alphaid" auslesen und schon haben wir den Link zum Bild:Quote:
"[{"name":"b.jpg","size":35200,"type":"image\/jpeg","url":"http:\/\/epvpimg.com\/U9zFd","thumbnail_url":"http:\/\/i.epvpimg.com\/U9zFd.jpg","alphaid":"U9zFd","extension":".jpg"}]"
PHP Code:
Dim alphaid As String = html.Substring(html.IndexOf("alphaid")).Split(""""c)(2)
//alphaid hat nun den Wert U9zFd
//daraus bilden wir nun den Link
Dim url As String = "http://epvpimg.com/" & alphaid

Hoffe ich konnte damit einigen weiterhelfen.
Kraizy






