rust-s3 [docs]
用于操作 Amazon S3 或任意 S3 兼容 API 的 Rust 库,完全兼容 async/await 和 futures ^0.3。所有 async 功能均可关闭,且可使用仅同步的实现。所有请求会自动重试一次,并可通过 set_retries 调用进一步修改。
:raised_hands: 支持进一步的维护与开发
正如许多人所指出的,我对该库的关注度时高时低,确保我持续维护并为其添加功能的最佳方式是捐赠一些 BTC,或成为赞助者。感谢您的支持!
:moneybag: BTC :point_right: bc1q7ukqe09zplg2sltgfrkukghpelfaz7qja8pw6u
简介
面向 Amazon S3 以及 S3 兼容对象存储 API(如 Backblaze B2、Wasabi、Yandex、Minio 或 Google Cloud Storage)的简洁接口。
支持:put、get、list、delete、对 tags 和 location 的操作,以及 head。
此外,提供了一个专用的 presign_get Bucket 方法。这意味着您可以上传到 S3,并将链接提供给特定人员,而无需担心 S3 上公开可访问的文件。这也意味着您可以向他人提供
一个 PUT 预签名 URL,这意味着他们可以在预签名 URL 有效期内上传到 S3 中的特定键。
快速入门
[dependencies]
rust-s3 = "0.37.2"
阅读并运行 examples 文件夹中的示例,确保您拥有正在运行的变体的有效凭据。
# tokio, default
cargo run --example tokio
# async-std
cargo run --example async-std --no-default-features --features async-std-native-tls
# sync
cargo run --example sync --no-default-features --features sync-native-tls
# minio
cargo run --example minio
# r2
cargo run --example r2
# google cloud
cargo run --example google-cloud
特性
存在大量各种特性,以支持多种使用场景,请参阅 s3/Cargo.toml 获取详尽列表。下表列出了各种实用特性及其简短描述。
default-tokio运行时和native-tls实现blocking- 生成所有Bucket方法的*_blocking变体,否则仅提供async版本fail-on-err- 对 HTTP 错误返回 Result::Err
使用 default-features = false
with-async-std-async-std运行时,使用surf客户端sync- 无异步运行时,使用attohttpc进行 HTTP 请求tags-Bucket::get_object_tagging所需
所有运行时均支持 native-tls 或 rustls-tls,存在涵盖所有组合的特性,请参阅 s3/Cargo.toml 获取完整列表。
路径或子域名风格的 URL 和请求头
Bucket 结构体提供了用于 path-style 路径的构造函数,subdomain 风格为默认。Bucket 公开了用于配置和访问 path-style 配置的方法。blocking 特性将为下列所有方法生成 *_blocking 变体。
LocalStack 兼容性
使用 LocalStack 时,您可能需要跳过在创建存储桶请求中发送位置约束。LocalStack 不支持请求体中的位置约束,并会返回 InvalidLocationConstraint 错误。设置此环境变量以跳过该约束:
export RUST_S3_SKIP_LOCATION_CONSTRAINT=true
# or
export RUST_S3_SKIP_LOCATION_CONSTRAINT=1
对于不支持 AWS 风格位置约束的其他 S3 兼容服务,可能也需要此设置。
存储桶
create | async |
delete | async |
list | async |
exists | async |
预签名
POST | presign_post |
PUT | presign_put |
GET | presign_get |
DELETE | presign_delete |
GET
获取对象有几种不同的选项。sync 和 async 方法对 std::io::Write 是泛型的,
而 tokio 方法对 tokio::io::AsyncWriteExt 是泛型的。
async/sync/async-blocking | get_object |
async/sync/async-blocking | get_object_stream |
async/sync/async-blocking | get_object_to_writer |
PUT
每个 GET 方法都有一个 PUT 伴随 sync,并且 async 方法对 std::io::Read 是泛型的。async stream 方法对 futures_io::AsyncReadExt 是泛型的,而 tokio 方法对 tokio::io::AsyncReadExt 是泛型的。
async/sync/async-blocking | put_object |
async/sync/async-blocking | put_object_with_content_type |
async/sync/async-blocking | put_object_stream |
列表
async/sync/async-blocking | list |
删除
async/sync/async-blocking | delete_object |
async/sync/async-blocking | delete_objects |
位置
async/sync/async-blocking | location |
标记
async/sync/async-blocking | put_object_tagging |
async/sync/async-blocking | get_object_tagging |
Head
async/sync/async-blocking | head_object |