Crates.io | aliyun-oss-rs |
lib.rs | aliyun-oss-rs |
version | 0.1.1 |
created_at | 2023-06-15 14:50:45.413125+00 |
updated_at | 2025-09-18 05:01:31.847628+00 |
description | A non-official Rust SDK implementation for Alibaba Cloud OSS. |
homepage | |
repository | https://github.com/AldenClark/aliyun-oss-rs |
max_upload_size | |
id | 891164 |
size | 268,857 |
aliyun-oss-rs
is an unofficial Rust SDK for Alibaba Cloud Object Storage Service (OSS).
It provides a simple, chainable API with minimal abstractions. Async is enabled by default; a sync
feature is available for selected APIs.
Add the dependency in your Cargo.toml
:
# Async by default
aliyun-oss-rs = { version = "0.1.1" }
Enable synchronous APIs if needed:
aliyun-oss-rs = { version = "0.1.1", features = ["sync"] }
use aliyun_oss_rs::OssClient;
#[tokio::main]
async fn main() {
let client = OssClient::new("<AccessKeyId>", "<AccessKeySecret>");
// List buckets
let buckets = client
.list_buckets()
.set_prefix("rust")
.send()
.await;
println!("buckets = {:?}", buckets);
}
Need to work with STS credentials? Use
OssClient::with_security_token(token)
(or the corresponding bucket/object helpers) before sending requests.
List objects in a bucket:
use aliyun_oss_rs::OssClient;
#[tokio::main]
async fn main() {
let client = OssClient::new("<AccessKeyId>", "<AccessKeySecret>");
let bucket = client.bucket("example-bucket", "oss-cn-zhangjiakou.aliyuncs.com");
let objects = bucket
.list_objects()
.set_prefix("rust")
.set_max_keys(200)
.send()
.await;
println!("objects = {:?}", objects);
}
Upload a file from disk:
use aliyun_oss_rs::OssClient;
#[tokio::main]
async fn main() -> Result<(), aliyun_oss_rs::Error> {
let client = OssClient::new("<AccessKeyId>", "<AccessKeySecret>");
let bucket = client.bucket("example-bucket", "oss-cn-zhangjiakou.aliyuncs.com");
let object = bucket.object("rust.png");
object
.put_object()
.send_file("/path/to/file.png")
.await?;
Ok(())
}
Download to a local file:
use aliyun_oss_rs::OssClient;
#[tokio::main]
async fn main() -> Result<(), aliyun_oss_rs::Error> {
let client = OssClient::new("<AccessKeyId>", "<AccessKeySecret>");
let bucket = client.bucket("example-bucket", "oss-cn-zhangjiakou.aliyuncs.com");
let object = bucket.object("rust.png");
object
.get_object()
.download_to_file("./downloads/rust.png")
.await?;
Ok(())
}
Generate a pre-signed URL:
use aliyun_oss_rs::OssClient;
use time::{Duration, OffsetDateTime};
#[tokio::main]
async fn main() {
let client = OssClient::new("<AccessKeyId>", "<AccessKeySecret>");
let bucket = client.bucket("example-bucket", "oss-cn-zhangjiakou.aliyuncs.com");
let object = bucket.object("rust.png");
let expires = OffsetDateTime::now_utc() + Duration::hours(24);
// Optionally bind a custom domain and HTTPS for the URL
let url = object
.get_object_url()
.set_custom_domain("cdn.example.com", true)
.url(expires);
println!("signed url = {}", url);
}
Synchronous notes:
features = ["sync"]
, several bucket-level APIs offer *_sync
variants (e.g. get_bucket_location_sync
).sync
feature set will continue to expand over time.Basic
ListBuckets
)DescribeRegions
)Bucket operations
PutBucket
)DeleteBucket
)ListObjectsV2
)GetBucketInfo
)GetBucketStat
)DeleteMultipleObjects
)ListMultipartUploads
)GetBucketAcl
)PutBucketAcl
)GetBucketLocation
)GetBucketLogging
)PutBucketLogging
)DeleteBucketLogging
)Get/Put/DeleteBucketCors
)Get/Put/DeleteBucketLifecycle
)Get/Put/DeleteBucketReferer
)Get/Put/DeleteBucketWebsite
)Get/Put/DeleteBucketPolicy
)Get/Put/DeleteBucketEncryption
)Initiate/Get/Complete/Extend/AbortBucketWorm
)Put/Get/Delete/ListBucketInventory
)Object operations
PutObject
)GetObject
)SelectObject
)CopyObject
)AppendObject
)DeleteObject
)RestoreObject
)HeadObject
)GetObjectMeta
)GetObjectUrl
)InitiateMultipartUpload
)UploadPart
)UploadPartCopy
)CompleteMultipartUpload
)AbortMultipartUpload
)ListParts
)GetObjectAcl
)PutObjectAcl
)GetObjectTagging
)PutObjectTagging
)DeleteObjectTagging
)PutSymlink
)GetSymlink
)This project is a work in progress and not an official Alibaba Cloud product. Pull requests are welcome.