Visual FoxPro
Visual FoxPro
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 Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loRest
LOCAL lnBTls
LOCAL lnPort
LOCAL lnBAutoReconnect
LOCAL loSbHtml
LOCAL loFileStream
LOCAL lcResponseBody
lnSuccess = 0
* This example requires the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.
loRest = CreateObject('Chilkat.Rest')
* Connect to the destination web server.
lnBTls = 1
lnPort = 443
lnBAutoReconnect = 1
lnSuccess = loRest.Connect("www.somewebserver.com",lnPort,lnBTls,lnBAutoReconnect)
* 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.
loRest.AddHeader("Content-Type","multipart/form-data")
* Specify each part of the request.
loRest.PartSelector = "1"
loRest.AddHeader("Content-Disposition",'form-data; name="text1"')
loRest.SetMultipartBodyString("text 123 abc")
loRest.PartSelector = "2"
loRest.AddHeader("Content-Disposition",'form-data; name="text2"')
loRest.SetMultipartBodyString("xyz")
loRest.PartSelector = "3"
loRest.AddHeader("Content-Disposition",'form-data; name="file1"; filename="a.txt"')
loRest.AddHeader("Content-Type","text/plain")
loRest.SetMultipartBodyString("Content of a.txt.")
loRest.PartSelector = "4"
loRest.AddHeader("Content-Disposition",'form-data; name="file2"; filename="a.html"')
loRest.AddHeader("Content-Type","text/html")
loSbHtml = CreateObject('Chilkat.StringBuilder')
loSbHtml.LoadFile("qa_data/html/a.html","utf-8")
loRest.SetMultipartBodySb(loSbHtml)
loRest.PartSelector = "5"
loRest.AddHeader("Content-Disposition",'form-data; name="file3"; filename="starfish.jpg"')
loRest.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.
loFileStream = CreateObject('Chilkat.Stream')
loFileStream.SourceFile = "qa_data/jpg/starfish.jpg"
loRest.SetMultipartBodyStream(loFileStream)
lcResponseBody = loRest.FullRequestMultipart("POST","/some_path")
IF (loRest.LastMethodSuccess <> 1) THEN
? loRest.LastErrorText
RELEASE loRest
RELEASE loSbHtml
RELEASE loFileStream
CANCEL
ENDIF
* ...
* ...
* Clear the REST object for any subsequent requests..
loRest.ClearAllHeaders()
loRest.ClearAllParts()
loRest.PartSelector = ""
RELEASE loRest
RELEASE loSbHtml
RELEASE loFileStream