use avl_storage::StorageClient;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("📦 AVL Storage Multipart Upload Example\n");
let client = StorageClient::connect("https://storage.avila.cloud").await?;
println!("Uploading large file (100 MB) using multipart...\n");
println!("Step 1: Initiating multipart upload...");
let upload = client.create_multipart_upload("my-bucket", "large-file.bin").await?;
println!("✓ Upload ID: {}\n", upload.upload_id);
let chunk_size = 5 * 1024 * 1024; let total_parts = 20;
println!("Step 2: Uploading {} parts (5 MB each)...", total_parts);
let mut parts = Vec::new();
for part_number in 1..=total_parts {
let chunk = vec![0u8; chunk_size];
let etag = client.upload_part(
"my-bucket",
"large-file.bin",
&upload.upload_id,
part_number,
chunk,
).await?;
parts.push((part_number, etag));
if part_number % 5 == 0 {
println!(" ✓ Uploaded {}/{} parts", part_number, total_parts);
}
}
println!("✓ All parts uploaded\n");
println!("Step 3: Completing multipart upload...");
client.complete_multipart_upload(
"my-bucket",
"large-file.bin",
&upload.upload_id,
parts,
).await?;
println!("✓ Upload complete!\n");
println!("🎉 Successfully uploaded 100 MB file!");
println!("\n💡 Key features:");
println!(" ✓ Parallel uploads (faster transfer)");
println!(" ✓ Resumable (can retry failed parts)");
println!(" ✓ Automatic compression");
println!(" ✓ 3-8ms latency per part in Brazil");
Ok(())
}