use std::{env, fs::File, io::Read, process};
use xt_oss::{
oss::entities::{ObjectACL, StorageClass},
prelude::*,
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotenv::dotenv().ok();
let options = util::options_from_env();
let client = oss::Client::new(options);
let target_file = {
let mut target_file = env::current_dir()?;
["assets", "samples", "index.html"]
.iter()
.for_each(|e| {
target_file.push(e);
});
target_file.display().to_string()
};
let content_md5 = util::oss_file_md5(&target_file)?;
let content_type = {
let mime = mime_guess::from_path(&target_file).first().unwrap();
&mime.to_string()[..]
};
let content = {
let mut current_file = File::open(&target_file)?;
let mut content = vec![];
current_file.read_to_end(&mut content)?;
oss::Bytes::from(content)
};
let resp = client
.PutObject("index.html")
.with_object_acl(ObjectACL::PublicRead)
.with_content_type(content_type)
.with_storage_class(StorageClass::Standard)
.with_content(content)
.with_content_md5(&content_md5)
.with_oss_tagging(vec![("k100", "v100"), ("k200", "v200")])
.execute()
.await
.unwrap_or_else(|error| {
eprint!("reqwest error: {}", error);
process::exit(-1);
});
match resp {
Ok(data) => println!("{:#?}", data.headers()),
Err(message) => println!("{:#?}", message.content()),
}
Ok(())
}