79 lines
2.2 KiB
Rust
79 lines
2.2 KiB
Rust
//! Demonstrate custom metadata (x-amz-meta-*) with post3.
|
|
//!
|
|
//! Prerequisites: post3-server running on localhost:9000
|
|
//! mise run up && mise run dev
|
|
//!
|
|
//! Run:
|
|
//! cargo run -p post3-sdk --example metadata
|
|
|
|
use post3_sdk::Post3Client;
|
|
|
|
#[tokio::main]
|
|
async fn main() -> anyhow::Result<()> {
|
|
let endpoint = std::env::var("POST3_ENDPOINT")
|
|
.unwrap_or_else(|_| "http://localhost:9000".to_string());
|
|
let client = Post3Client::new(&endpoint);
|
|
|
|
client.create_bucket("meta-bucket").await?;
|
|
|
|
// Use the inner aws-sdk-s3 client to set custom metadata
|
|
let inner = client.inner();
|
|
println!("Putting object with custom metadata...");
|
|
inner
|
|
.put_object()
|
|
.bucket("meta-bucket")
|
|
.key("report.pdf")
|
|
.body(Vec::from(&b"fake pdf content"[..]).into())
|
|
.content_type("application/pdf")
|
|
.metadata("author", "alice")
|
|
.metadata("department", "engineering")
|
|
.metadata("version", "2")
|
|
.send()
|
|
.await?;
|
|
|
|
// Retrieve metadata via head_object
|
|
let head = inner
|
|
.head_object()
|
|
.bucket("meta-bucket")
|
|
.key("report.pdf")
|
|
.send()
|
|
.await?;
|
|
|
|
println!("Content-Type: {:?}", head.content_type());
|
|
println!("Content-Length: {:?}", head.content_length());
|
|
println!("ETag: {:?}", head.e_tag());
|
|
if let Some(metadata) = head.metadata() {
|
|
println!("Custom metadata:");
|
|
for (k, v) in metadata {
|
|
println!(" x-amz-meta-{}: {}", k, v);
|
|
}
|
|
}
|
|
|
|
// Retrieve the full object with metadata
|
|
let resp = inner
|
|
.get_object()
|
|
.bucket("meta-bucket")
|
|
.key("report.pdf")
|
|
.send()
|
|
.await?;
|
|
|
|
println!("\nGet object response:");
|
|
println!(" Content-Type: {:?}", resp.content_type());
|
|
if let Some(metadata) = resp.metadata() {
|
|
println!(" Metadata:");
|
|
for (k, v) in metadata {
|
|
println!(" x-amz-meta-{}: {}", k, v);
|
|
}
|
|
}
|
|
|
|
let body = resp.body.collect().await?.into_bytes();
|
|
println!(" Body: {}", String::from_utf8_lossy(&body));
|
|
|
|
// Cleanup
|
|
client.delete_object("meta-bucket", "report.pdf").await?;
|
|
client.delete_bucket("meta-bucket").await?;
|
|
println!("\nDone!");
|
|
|
|
Ok(())
|
|
}
|