Zig
Zig
Asynchronous HTTP Upload
See more Upload Examples
Demonstrates how to do an HTTP 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
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");
// 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)});
}
}