Sample code for 30+ languages & platforms
Unicode C

Asynchronous HTTPS Upload (TLS)

See more Upload Examples

Demonstrates how to do an HTTPS (TLS) upload asynchronously in a background thread.

A server-side C# example showing how to receive an upload is located at C# ASP.NET Code to Receive Upload

Chilkat Unicode C Downloads

Unicode C
#include <C_CkUploadW.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkUploadW upload;

    success = FALSE;

    upload = CkUploadW_Create();

    // Specify the page (ASP, ASP.NET, Perl, Python, Ruby, CGI, etc)
    // that will process the HTTP Upload.
    CkUploadW_putHostname(upload,L"www.mywebserver.com");
    CkUploadW_putPath(upload,L"/receiveUpload.aspx");

    // Add one or more files to be uploaded.
    CkUploadW_AddFileReference(upload,L"file1",L"dude.gif");
    CkUploadW_AddFileReference(upload,L"file2",L"pigs.xml");
    CkUploadW_AddFileReference(upload,L"file3",L"sample.doc");

    // To upload using SSL/TLS (https), set the Ssl property = TRUE
    CkUploadW_putSsl(upload,TRUE);

    // Begin the HTTP upload in a background thread:
    success = CkUploadW_BeginUpload(upload);
    if (success != TRUE) {
        wprintf(L"%s\n",CkUploadW_lastErrorText(upload));
    }
    else {
        wprintf(L"Upload started..\n");
    }

    // Wait for the upload to finish.
    // Print the progress as we wait...
    while ((CkUploadW_getUploadInProgress(upload) == TRUE)) {
        // We can abort the upload at any point by calling:
        // upload.AbortUpload();

        // Display the percentage complete and the number of bytes uploaded so far..
        // The total upload size will become set after the upload begins:
        wprintf(L"%u% %u/%u\n",CkUploadW_getPercentUploaded(upload),CkUploadW_getNumBytesSent(upload),CkUploadW_getTotalUploadSize(upload));

        // Sleep 2/10ths of a second.
        CkUploadW_SleepMs(upload,200);

    }

    // Did the upload succeed?
    if (CkUploadW_getUploadSuccess(upload) == TRUE) {
        wprintf(L"Files uploaded!\n");
    }
    else {
        wprintf(L"%s\n",CkUploadW_lastErrorText(upload));
    }



    CkUploadW_Dispose(upload);

    }