我尝试将 AsyncRead 特征上传到 s3,但我不知道如何将 AsyncRead 对象转换为库(aws-sdk-s3)知道如何使用的 ByteStream。
我的函数的签名是这样的:
async fn upload(&self, key: String, data: &mut impl AsyncRead) -> Result<(),Error>;
let byte_stream = codec::FramedRead::new(read, codec::BytesCodec::new()).map(|r| r.freeze());
let res = s3
.put_object()
.key(id)
.body(ByteStream::new(byte_stream))
.send()
.await;
我遇到的错误是:
&impl 'async_trait + AsyncRead: AsyncRead
FramedRead<&impl 'async_trait + AsyncRead, BytesCodec>
不是迭代器我发现了this并尝试像“好方法”部分一样实现它,但我遇到了编译错误。
我还查看了文档,但没有发现任何可以帮助转换的内容(仅找到相反的方法)。
如何将 AsyncRead 对象上传到 s3?
这个功能等了很久了。不幸的是,截至撰写本文时,唯一的方法是使用分段上传策略。
看看这个问题:https://github.com/awslabs/aws-sdk-rust/discussions/361
这是一个多部分上传的示例,您可以在其中分块读取
AsyncRead
并逐一传输它们:https://github.com/awslabs/aws-sdk-rust/blob/main/examples/示例/s3/src/bin/s3-multipart-upload.rs