PureBasic
PureBasic
HTTP multipart/form-data Upload
See more HTTP Examples
Demonstrates how to upload files to an HTTP server using a multipart/form-data POST.Chilkat PureBasic Downloads
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkHttpRequest.pb"
Procedure ChilkatExample()
success.i = 0
; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
http.i = CkHttp::ckCreate()
If http.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
req.i = CkHttpRequest::ckCreate()
If req.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkHttpRequest::setCkHttpVerb(req, "POST")
CkHttpRequest::setCkContentType(req, "multipart/form-data")
CkHttpRequest::setCkPath(req, "rcvFormDataUpload.aspx")
; Send an "Expect: 100-continue" header in the request.
; This causes the HTTP server to end a 100-continue response
; immediately after receiving the HTTP header. The client
; (Chilkat) will receive this intermediate response, and if
; it's not an error response, it knows that the HTTP server will
; accept the data that is forthcoming.
; The alternative is to get an error response after trying to upload
; the entire contents of the files.
CkHttpRequest::ckAddHeader(req,"Expect","100-continue")
; Call AddFileForUpload2 for each file to be uploaded in the HTTP multipart/form-data POST
; To allow Chilkat to determine the content-type automatically based on file-extension,
; call AddFileForUpload instead.
; The 1st arg is the filename passed in the HTTP request.
; The 2nd arg is the path in the local filesytem.
; The file is not loaded into memory. It is streamed directly from the file
; when the HTTP POST is sent.
success = CkHttpRequest::ckAddFileForUpload2(req,"starfish.jpg","c:/qa_data/starfish.jpg","image/jpg")
If success = 0
Debug CkHttpRequest::ckLastErrorText(req)
CkHttp::ckDispose(http)
CkHttpRequest::ckDispose(req)
ProcedureReturn
EndIf
success = CkHttpRequest::ckAddFileForUpload(req,"something.pdf","c:/qa_data/something.pdf")
If success = 0
Debug CkHttpRequest::ckLastErrorText(req)
CkHttp::ckDispose(http)
CkHttpRequest::ckDispose(req)
ProcedureReturn
EndIf
; Its also possible to add a file from a string:
success = CkHttpRequest::ckAddStringForUpload(req,"test.xml","test.xml","<abc>This is the test.xml content</abc>","utf-8")
; We'll assume success since no files are involved..
; This sends the HTTP request (with 3 files being uploaded) to
; http://www.mywebserver123abc.com/rcvFormDataUpload.aspx
resp.i = CkHttpResponse::ckCreate()
If resp.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkHttp::ckHttpSReq(http,"www.mywebserver123abc.com",80,0,req,resp)
If success = 0
Debug CkHttp::ckLastErrorText(http)
CkHttp::ckDispose(http)
CkHttpRequest::ckDispose(req)
CkHttpResponse::ckDispose(resp)
ProcedureReturn
EndIf
Debug "HTTP response status: " + Str(CkHttpResponse::ckStatusCode(resp))
; See the online reference documentation for
; other information that can be obtained from the response object.
; To send using SSL/TLS, do this instead.
; This sends to https://www.mywebserver123abc.com/rcvFormDataUpload.aspx
success = CkHttp::ckHttpSReq(http,"www.mywebserver123abc.com",443,1,req,resp)
If success = 0
Debug CkHttp::ckLastErrorText(http)
CkHttp::ckDispose(http)
CkHttpRequest::ckDispose(req)
CkHttpResponse::ckDispose(resp)
ProcedureReturn
EndIf
Debug "HTTP response status: " + Str(CkHttpResponse::ckStatusCode(resp))
; See the online reference documentation for
; other information that can be obtained from the response object.
CkHttp::ckDispose(http)
CkHttpRequest::ckDispose(req)
CkHttpResponse::ckDispose(resp)
ProcedureReturn
EndProcedure