DataFlex
DataFlex
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 DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoRest
Boolean iBTls
Integer iPort
Boolean iBAutoReconnect
Variant vSbHtml
Handle hoSbHtml
Variant vFileStream
Handle hoFileStream
String sResponseBody
String sTemp1
Boolean bTemp1
Move False To iSuccess
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
Get Create (RefClass(cComChilkatRest)) To hoRest
If (Not(IsComObjectCreated(hoRest))) Begin
Send CreateComObject of hoRest
End
// Connect to the destination web server.
Move True To iBTls
Move 443 To iPort
Move True To iBAutoReconnect
Get ComConnect Of hoRest "www.somewebserver.com" iPort iBTls iBAutoReconnect To iSuccess
// 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.
Get ComAddHeader Of hoRest "Content-Type" "multipart/form-data" To iSuccess
// Specify each part of the request.
Set ComPartSelector Of hoRest To "1"
Get ComAddHeader Of hoRest "Content-Disposition" 'form-data; name="text1"' To iSuccess
Get ComSetMultipartBodyString Of hoRest "text 123 abc" To iSuccess
Set ComPartSelector Of hoRest To "2"
Get ComAddHeader Of hoRest "Content-Disposition" 'form-data; name="text2"' To iSuccess
Get ComSetMultipartBodyString Of hoRest "xyz" To iSuccess
Set ComPartSelector Of hoRest To "3"
Get ComAddHeader Of hoRest "Content-Disposition" 'form-data; name="file1"; filename="a.txt"' To iSuccess
Get ComAddHeader Of hoRest "Content-Type" "text/plain" To iSuccess
Get ComSetMultipartBodyString Of hoRest "Content of a.txt." To iSuccess
Set ComPartSelector Of hoRest To "4"
Get ComAddHeader Of hoRest "Content-Disposition" 'form-data; name="file2"; filename="a.html"' To iSuccess
Get ComAddHeader Of hoRest "Content-Type" "text/html" To iSuccess
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbHtml
If (Not(IsComObjectCreated(hoSbHtml))) Begin
Send CreateComObject of hoSbHtml
End
Get ComLoadFile Of hoSbHtml "qa_data/html/a.html" "utf-8" To iSuccess
Get pvComObject of hoSbHtml to vSbHtml
Get ComSetMultipartBodySb Of hoRest vSbHtml To iSuccess
Set ComPartSelector Of hoRest To "5"
Get ComAddHeader Of hoRest "Content-Disposition" 'form-data; name="file3"; filename="starfish.jpg"' To iSuccess
Get ComAddHeader Of hoRest "Content-Type" "image/jpeg" To iSuccess
// When the request is sent, stream this part directly from the file.
// This avoids having to load the entire file into memory.
Get Create (RefClass(cComChilkatStream)) To hoFileStream
If (Not(IsComObjectCreated(hoFileStream))) Begin
Send CreateComObject of hoFileStream
End
Set ComSourceFile Of hoFileStream To "qa_data/jpg/starfish.jpg"
Get pvComObject of hoFileStream to vFileStream
Get ComSetMultipartBodyStream Of hoRest vFileStream To iSuccess
Get ComFullRequestMultipart Of hoRest "POST" "/some_path" To sResponseBody
Get ComLastMethodSuccess Of hoRest To bTemp1
If (bTemp1 <> True) Begin
Get ComLastErrorText Of hoRest To sTemp1
Showln sTemp1
Procedure_Return
End
// ...
// ...
// Clear the REST object for any subsequent requests..
Get ComClearAllHeaders Of hoRest To iSuccess
Get ComClearAllParts Of hoRest To iSuccess
Set ComPartSelector Of hoRest To ""
End_Procedure