Sample code for 30+ languages & platforms
DataFlex

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 DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoHttp
    Variant vReq
    Handle hoReq
    Variant vResp
    Handle hoResp
    String sTemp1
    Integer iTemp1

    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(cComChilkatHttp)) To hoHttp
    If (Not(IsComObjectCreated(hoHttp))) Begin
        Send CreateComObject of hoHttp
    End

    Get Create (RefClass(cComChilkatHttpRequest)) To hoReq
    If (Not(IsComObjectCreated(hoReq))) Begin
        Send CreateComObject of hoReq
    End
    Set ComHttpVerb Of hoReq To "POST"
    Set ComContentType Of hoReq To "multipart/form-data"
    Set ComPath Of hoReq To "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.
    Send ComAddHeader To hoReq "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.
    Get ComAddFileForUpload2 Of hoReq "starfish.jpg" "c:/qa_data/starfish.jpg" "image/jpg" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoReq To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComAddFileForUpload Of hoReq "something.pdf" "c:/qa_data/something.pdf" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoReq To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Its also possible to add a file from a string:
    Get ComAddStringForUpload Of hoReq "test.xml" "test.xml" "<abc>This is the test.xml content</abc>" "utf-8" To iSuccess
    // 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
    Get Create (RefClass(cComChilkatHttpResponse)) To hoResp
    If (Not(IsComObjectCreated(hoResp))) Begin
        Send CreateComObject of hoResp
    End
    Get pvComObject of hoReq to vReq
    Get pvComObject of hoResp to vResp
    Get ComHttpSReq Of hoHttp "www.mywebserver123abc.com" 80 False vReq vResp To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoHttp To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComStatusCode Of hoResp To iTemp1
    Showln "HTTP response status: " iTemp1
    // 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
    Get pvComObject of hoReq to vReq
    Get pvComObject of hoResp to vResp
    Get ComHttpSReq Of hoHttp "www.mywebserver123abc.com" 443 True vReq vResp To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoHttp To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComStatusCode Of hoResp To iTemp1
    Showln "HTTP response status: " iTemp1
    // See the online reference documentation for 
    // other information that can be obtained from the response object.


End_Procedure