Sample code for 30+ languages & platforms
Zig

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

Zig
const std = @import("std");
const chilkat = @import("chilkat");

pub fn main(init: std.process.Init) !void {
    const alloc = init.arena.allocator();

    var success: bool = false;

    const upload = try chilkat.Upload.init();
    defer upload.deinit();

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

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

    // To upload using SSL/TLS (https), set the Ssl property = true
    upload.setSsl(true);

    // Begin the HTTP upload in a background thread:
    success = if (upload.beginUpload()) true else |_| false;
    if (!success) {
        std.debug.print("{s}\n", .{try upload.getLastErrorText(alloc)});
    } else {
        std.debug.print("Upload started..\n", .{});
    }

    // Wait for the upload to finish.
    // Print the progress as we wait...
    while (upload.getUploadInProgress()) {
        // 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:
        std.debug.print("{d}% {d}/{d}\n", .{ upload.getPercentUploaded(), upload.getNumBytesSent(), upload.getTotalUploadSize() });

        // Sleep 2/10ths of a second.
        upload.sleepMs(200);
    }

    // Did the upload succeed?
    if (upload.getUploadSuccess()) {
        std.debug.print("Files uploaded!\n", .{});
    } else {
        std.debug.print("{s}\n", .{try upload.getLastErrorText(alloc)});
    }
}