28 个版本 (9 个破坏性更新)
0.10.0 | 2023年8月28日 |
---|---|
0.9.1 | 2023年3月30日 |
0.6.1 | 2022年12月9日 |
0.5.0 | 2022年8月29日 |
0.1.2 | 2018年12月10日 |
#1651 in 网页编程
每月下载量 88
55KB
1.5K SLoC
OSS-Rust-SDK
它是对 https://github.com/aliyun/aliyun-oss-cpp-sdk 的非官方 Rust 版本,仅实现了 https://help.aliyun.com/document_detail/31977.html 的核心 API,欢迎提交 PR 以实现您需要的接口。
入门
列出你的_Buckets
use oss_rust_sdk::prelude::*;
let oss_instance = OSS::new("your_AccessKeyId", "your_AccessKeySecret", "your_Endpoint", "your_Bucket");
let list_buckets = oss_instance.list_bucket(None).unwrap();
let id = list_buckets.id();
let your_Buckets = list_buckets.buckets();
let your_Bucket_names: Vec<&str> = your_Buckets.iter().map(|obj| obj.name()).collect();
获取对象
use oss_rust_sdk::prelude::*;
use std::collections::HashMap;
let oss_instance = OSS::new("your_AccessKeyId", "your_AccessKeySecret", "your_Endpoint", "your_Bucket");
/// if have extra header
let mut extra_header = HashMap::new();
extra_header.insert("content-type", "text/plain");
/// if have oss_sub_resource
let mut oss_sub_resource = HashMap::new();
oss_sub_resource.insert("acl", None);
oss_sub_resource.insert("response-content-type", Some("ContentType"));
let result = oss_instance.get_object("object", extar_header, oss_sub_resource);
/// or you may just get object
/// let result = oss_instance.get_object("object", None, None);
assert_eq!(result.is_ok(), true);
let buffer = result.unwrap();
异步获取对象
use oss_rust_sdk::oss::OSS;
use oss_rust_sdk::async_object::*;
use tokio::runtime::Runtime;
fn async_get_object_demo() {
let oss_instance = OSS::new("your_AccessKeyId", "your_AccessKeySecret", "your_Endpoint", "your_Bucket");
let mut rt = Runtime::new().expect("failed to start runtime");
rt.block_on(async move {
let _ = oss_instance.get_object("objectName", None::<HashMap<&str, &str>>, None).await.unwrap();
println!("buffer = {:?}", String::from_utf8(result.unwrap()));
});
}
or
async fn async_get_object_demo() -> Reuslt<String, Error> {
let oss_instance = OSS::new("your_AccessKeyId", "your_AccessKeySecret", "your_Endpoint", "your_Bucket");
let buf = oss_instance.async_get_object("objectName", None, None).await?;
String::from_utf8(buf)?
}
通过文件上传对象
use oss_rust_sdk::prelude::*;
let filename = "filename";
let oss_instance = OSS::new("your_AccessKeyId", "your_AccessKeySecret", "your_Endpoint", "your_Bucket");
let result = oss_instance.put_object_from_file(filename, "object", None, None);
assert_eq!(result.is_ok(), true)
通过缓冲区上传对象
let buffer = "some thing you want put to oss";
let oss_instance = OSS::new("your_AccessKeyId", "your_AccessKeySecret", "your_Endpoint", "your_Bucket");
let result = oss_instance.put_object_from_buffer(buffer.as_bytes(), "object", None, None);
assert_eq!(result.is_ok(), true)
异步发布对象
use oss_rust_sdk::oss::OSS;
use oss_rust_sdk::async_object::*;
let buffer = "test async put object from buffer";
let oss_instance = OSS::new("your_AccessKeyId", "your_AccessKeySecret", "your_Endpoint", "your_Bucket");
let mut headers = HashMap::new();
headers.insert("content-type", "text/plain");
oss_instance.put_object(buffer.as_bytes(),"your_object_name", headers,None).await?;
复制对象
use oss_rust_sdk::prelude::*;
let oss_instance = OSS::new("your_AccessKeyId", "your_AccessKeySecret", "your_Endpoint", "your_Bucket");
let result = oss_instance.copy_object_from_object("src_object", "dest_object", None, None);
assert_eq!(result.is_ok(), true)
删除对象
use oss_rust_sdk::prelude::*;
let oss_instance = OSS::new("your_AccessKeyId", "your_AccessKeySecret", "your_Endpoint", "your_Bucket");
let result = oss_instance.delete_object("object");
assert_eq!(result.is_ok(), true)
您可以使用 oss_instance.set_bucket("your_Bucket")
在创建 oss 实例后更改特定的存储桶。
许可协议
- Apache License 2.0.
依赖
~3–20MB
~250K SLoC