mirror of
https://github.com/actix/examples
synced 2025-03-27 21:44:02 +01:00
66 lines
1.8 KiB
Rust
66 lines
1.8 KiB
Rust
use std::io::Read as _;
|
|
|
|
use rusoto_core::Region;
|
|
use rusoto_s3::{DeleteObjectRequest, PutObjectRequest, S3Client, S3};
|
|
|
|
pub struct Client {
|
|
#[allow(dead_code)]
|
|
region: Region,
|
|
s3: S3Client,
|
|
bucket_name: String,
|
|
}
|
|
|
|
impl Client {
|
|
// construct S3 testing client
|
|
pub fn new() -> Client {
|
|
let region = Region::default();
|
|
|
|
Client {
|
|
region: region.to_owned(),
|
|
s3: S3Client::new(region),
|
|
bucket_name: std::env::var("AWS_S3_BUCKET_NAME").unwrap(),
|
|
}
|
|
}
|
|
|
|
pub fn url(&self, key: &str) -> String {
|
|
format!(
|
|
"https://{}.s3.{}.amazonaws.com/{key}",
|
|
std::env::var("AWS_S3_BUCKET_NAME").unwrap(),
|
|
std::env::var("AWS_REGION").unwrap(),
|
|
)
|
|
}
|
|
|
|
pub async fn put_object(&self, localfilepath: &str, key: &str) -> String {
|
|
let mut file = std::fs::File::open(localfilepath).unwrap();
|
|
let mut contents: Vec<u8> = Vec::new();
|
|
let _ = file.read_to_end(&mut contents);
|
|
let put_request = PutObjectRequest {
|
|
bucket: self.bucket_name.to_owned(),
|
|
key: key.to_owned(),
|
|
body: Some(contents.into()),
|
|
..Default::default()
|
|
};
|
|
let _res = self
|
|
.s3
|
|
.put_object(put_request)
|
|
.await
|
|
.expect("Failed to put test object");
|
|
|
|
self.url(key)
|
|
}
|
|
|
|
pub async fn delete_object(&self, key: String) {
|
|
let delete_object_req = DeleteObjectRequest {
|
|
bucket: self.bucket_name.to_owned(),
|
|
key: key.to_owned(),
|
|
..Default::default()
|
|
};
|
|
|
|
let _res = self
|
|
.s3
|
|
.delete_object(delete_object_req)
|
|
.await
|
|
.expect("Couldn't delete object");
|
|
}
|
|
}
|