Sample code for 30+ languages & platforms
Rust Requires Chilkat v11.0.0+

S3 Upload with Transfer Acceleration

See more Amazon S3 Examples

Demonstrates how to upload from a pre-signed URL with transfer acceleration.

Chilkat Rust Downloads

Rust

// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

let http = chilkat::Http::new();

http.set_aws_access_key("AWS_ACCESS_KEY");
http.set_aws_secret_key("AWS_SECRET_KEY");

// Make sure to set your AWS region correctly
http.set_aws_region("us-east-1");
let bucket_name = "chilkat200".to_string();
let object_name = "starfish/starfish.jpg".to_string();
let aws_service = "s3".to_string();
let http_verb = "PUT".to_string();

// To use S3 acceleration, we simply set the AwsEndpoint to "s3-accelerate.amazonaws.com".
// Note: You must enable transfer acceleration on your bucket.  Acceleration incurs a higher cost.
http.set_aws_endpoint("s3-accelerate.amazonaws.com");

// The signed URL will be valid for this number of seconds:
let num_seconds_valid = 86400;

// Choose between a URL beginning with "http://" or "https://"...
let b_use_https = true;

// Generate the pre-signed URL that will use s3-accelerate.amazonaws.com
let Ok(pre_signed_url) = http.s3_gen_presigned_url(&http_verb, b_use_https, &bucket_name, &object_name, num_seconds_valid, &aws_service) else {
    println!("{}", http.last_error_text());
    return;
};

// The following URL can be copy-and-pasted into a browser..
println!("Presigned URL for Upload: {}", pre_signed_url);

// Here's an example of a pre-signed URL
// 
// http://chilkat200.s3-accelerate.amazonaws.com/starfish/starfish.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIBJLOVZVXAU2AFUA%2F20200623%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20200623T234049Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=xxxxxeaea071178d772856c0a4e4c0114a8d9992f0d0812955e490d0exxxxxxx
// 

// Upload a local file using the pre-signed URL.
// (Chilkat provides other methods to upload file data directly from binary or text data in memory.)
let resp = chilkat::HttpResponse::new();
if http.http_file("PUT", &pre_signed_url, "qa_data/jpg/starfish.jpg", "image/jpg", &resp).is_err() {
    println!("{}", http.last_error_text());
    return;
}

println!("response status code = {}", resp.status_code());
println!("response body size: {}", resp.content_length());
if resp.content_length() > 0 {
    println!("response body:");
    println!("{}", resp.body_str());
}