amazon-s3 - 使用 rusoto 将字符串上传到 S3
问题描述
我正在使用rusoto S3 创建 JSON 字符串并将此字符串上传到 S3 存储桶。我可以创建字符串,但是 rusoto 的 S3PutObjectRequest
需要 aStreamingBody
并且我不确定如何StreamingBody
从字符串创建 a 或者这是否真的有必要。
extern crate json;
extern crate rusoto_core;
extern crate rusoto_s3;
extern crate futures;
use rusoto_core::Region;
use rusoto_s3::{S3, S3Client, PutObjectRequest};
fn main() {
let mut paths = Vec::new();
paths.push(1);
let s3_client = S3Client::new(Region::UsEast1);
println!("{}", json::stringify(paths));
s3_client.put_object(PutObjectRequest {
bucket: String::from("bucket"),
key: "@types.json".to_string(),
body: Some(json::stringify(paths)),
acl: Some("public-read".to_string()),
..Default::default()
}).sync().expect("could not upload");
}
我得到的错误是
error[E0308]: mismatched types
--> src/main.rs:16:20
|
16 | body: Some(json::stringify(paths)),
| ^^^^^^^^^^^^^^^^^^^^^^ expected struct `rusoto_core::ByteStream`, found struct `std::string::String`
|
= note: expected type `rusoto_core::ByteStream`
found type `std::string::String`
我不知道如何给这个ByteStream
...ByteStream::new(json::stringify(paths))
不起作用并给我一个不同的错误。
如何上传字符串?
解决方案
StreamingBody
是一个类型别名:
type StreamingBody = ByteStream;
ByteStream
有多个构造函数,包括一个实现From
:
impl From<Vec<u8>> for ByteStream
您可以将 aString
转换为Vec<u8>
using String::into_bytes
。全部一起:
fn example(s: String) -> rusoto_s3::StreamingBody {
s.into_bytes().into()
}
推荐阅读
- laravel - 在具有相同数据类型的两列上有所不同
- ruby-on-rails - 如何创建一个 Rails 6 应用程序的多个版本?
- multithreading - Delphi 线程池队列
- android - Android 10 上的弹出窗口自动关闭
- postgresql - Postgres 9.6 - jsonb ?| 运算符缺少索引,但存在 ? 操作员
- powershell - 如何使用PowerShell或CMD将另一个域的AD组添加到当前域中服务器的本地管理员
- image - 在颤动中将图像转换为base64
- sql-server - SSDT 将 2 列添加到表的末尾会导致表重建
- android - 如何复制类似 Photoshop 的功能来保存和恢复 UI 布局?
- python - 如何将 Pandas DataFrame 的每一行转换为新的 nxm 矩阵?