将 AsyncRead 上传到 s3 rust

问题描述 投票:0回答:1

我尝试将 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?

amazon-s3 rust aws-sdk aws-sdk-rust
1个回答
0
投票

这个功能等了很久了。不幸的是,截至撰写本文时,唯一的方法是使用分段上传策略。

看看这个问题: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

© www.soinside.com 2019 - 2024. All rights reserved.