使用 B2 存储
B2 是兼容亚马逊 S3 的对象存储技术,Backblaze 是最流行的 B2 云存储提供商之一。本章我们将讨论:注册 Backblaze 的免费 B2 云存储服务、开启 Cloudflare 免流、开启 B2 存储桶的 API 访问,以及客户端的使用,包括: Backblaze B2 官方命令行、Cyberduck GUI 工具等。【为避免服务被滥用,本章将永久关闭试读功能】- 支持试读
使用B2自动备份数据库
本章将讨论使用 B2 存储来自动备份数据库。 - 支持试读
Rust 集成 B2
本章将讨论如何将 B2 集成到 Rust中。 使用 AXUM 和 B2 对象存储实现图库
本章我们将讨论使用 AXUM 和 B2 打造一个简单的图库应用。
Rust 集成 B2
本章将讨论如何将 B2 集成到 Rust中。
依赖
[dependencies]
rust-s3 = "0.33"
tokio = { version = "1", features = ["full"]}
接下来,我们看一下它的基本操作。
授权
首先,你需要按照《使用 B2 存储》章节所述,注册并添加应用程序密钥。
rust-s3
的授权封装在 s3::creds::Credentials
结构体中,对于 B2 而言,该结构体的以下两个字段必须填写:
access_key
:对应B2应用程序的keyID
secret_key
:对应B2应用程序的applicationKey
所以,它最终是这样的:
let cred = s3::creds::Credentials {
access_key: Some("你的keyID".to_string()),
secret_key: Some("你的applicationKey".to_string()),
session_token: None,
security_token: None,
expiration: None,
};
实例化桶
授权是实例化桶时的参数之一,它需要以下参数:
- 桶名:你创建的应用程序密钥对应的桶名称
- 区域:该桶的 Endpoint
- 授权:上一步骤创建的授权
let bucket = s3::Bucket::new("桶名称", "区域".parse().unwrap, cred).unwrap();
实例化桶之后,就可以进行一系列操作了。
上传文件
put_object(远程路径, 数据)
put_object_with_content_type(远程路径, 数据, 内容类型)
两者区别在于,无论什么类型的文件,put_object()
的*content type(内容类型)*均为 application/octet-stream
,而 put_object_with_content_type()
可以手动为不同的文件指定对应的内容类型。
下载文件
let mut output_file = tokio::fs::File::create("/tmp/axum.rs.file").await.expect("创建文件失败");
let status_code = bucket.get_object_to_writer("axum.rs.file", &mut output_file).await?
删除文件
使用 delete_object()
可以删除指定的文件。
let resp = bucket.delete_object("axum.rs.file").await?;
assert_eq!(resp.status_code(), 204);
println!("{:?}", resp);