Sample code for 30+ languages & platforms
B4X

REST Stream Multipart Body from File

See more REST Examples

Demonstrates how to send a multipart/form-data HTTP request, where one of the parts contains data streamed directly from a file. This is good for cases where the file to be uploaded is very large.

Chilkat B4X Downloads

B4X
Dim success As Boolean = False

'  This example requires the Chilkat API to have been previously unlocked.
'  See Global Unlock Sample for sample code.

Dim rest As ChilkatRest
rest.Initialize("rest")

'  Connect to the destination web server.
Dim bTls As Boolean = True
Dim port As Int = 443
Dim bAutoReconnect As Boolean = True
success = rest.Connect("www.somewebserver.com", port, bTls, bAutoReconnect)

'  This example will send the following multipart/form-data request.
'  The Content-Length is automatically computed and added by Chilkat.

'  	POST /some_path HTTP/1.1
'  	Content-Type: multipart/form-data; boundary=---------------------------735323031399963166993862150
'  	Content-Length: 834
'  
'  	-----------------------------735323031399963166993862150
'  	Content-Disposition: form-data; name="text1"
'  
'  	text 123 abc
'  	-----------------------------735323031399963166993862150
'  	Content-Disposition: form-data; name="text2"
'  
'  	xyz
'  	-----------------------------735323031399963166993862150
'  	Content-Disposition: form-data; name="file1"; filename="a.txt"
'  	Content-Type: text/plain
'  
'  	Content of a.txt.
'  
'  	-----------------------------735323031399963166993862150
'  	Content-Disposition: form-data; name="file2"; filename="a.html"
'  	Content-Type: text/html
'  
'  	<!DOCTYPE html><title>Content of a.html.</title>
'  
'  	-----------------------------735323031399963166993862150
'  	Content-Disposition: form-data; name="file3"; filename="starfish.jpg"
'  	Content-Type: image/jpeg
'  
'  	binary data goes here
'  	-----------------------------735323031399963166993862150--

'  Set the Content-Type for the topmost MIME part.
rest.AddHeader("Content-Type", "multipart/form-data")

'  Specify each part of the request.
rest.PartSelector = "1"
rest.AddHeader("Content-Disposition", "form-data; name=" & Chr(34) & "text1" & Chr(34))
rest.SetMultipartBodyString("text 123 abc")

rest.PartSelector = "2"
rest.AddHeader("Content-Disposition", "form-data; name=" & Chr(34) & "text2" & Chr(34))
rest.SetMultipartBodyString("xyz")

rest.PartSelector = "3"
rest.AddHeader("Content-Disposition", "form-data; name=" & Chr(34) & "file1" & Chr(34) & "; filename=" & Chr(34) & "a.txt" & Chr(34))
rest.AddHeader("Content-Type", "text/plain")
rest.SetMultipartBodyString("Content of a.txt.")

rest.PartSelector = "4"
rest.AddHeader("Content-Disposition", "form-data; name=" & Chr(34) & "file2" & Chr(34) & "; filename=" & Chr(34) & "a.html" & Chr(34))
rest.AddHeader("Content-Type", "text/html")
Dim sbHtml As ChilkatStringBuilder
sbHtml.Initialize
sbHtml.LoadFile("qa_data/html/a.html", "utf-8")
rest.SetMultipartBodySb(sbHtml)

rest.PartSelector = "5"
rest.AddHeader("Content-Disposition", "form-data; name=" & Chr(34) & "file3" & Chr(34) & "; filename=" & Chr(34) & "starfish.jpg" & Chr(34))
rest.AddHeader("Content-Type", "image/jpeg")

'  When the request is sent, stream this part directly from the file.
'  This avoids having to load the entire file into memory.
Dim fileStream As ChilkatStream
fileStream.Initialize("fileStream")
fileStream.SourceFile = "qa_data/jpg/starfish.jpg"
rest.SetMultipartBodyStream(fileStream)

Dim responseBody As String = rest.FullRequestMultipart("POST", "/some_path")
If rest.LastMethodSuccess <> True Then
    Log(rest.LastErrorText)
    Return
End If


'  ...
'  ...

'  Clear the REST object for any subsequent requests..
rest.ClearAllHeaders
rest.ClearAllParts
rest.PartSelector = ""