我的Axum应用程序中有一个多部分表单端点。文件上传表单字段应该像这样阅读:
// let mut field: axum::extract::multipart::Field
while let Some(chunk) = field.chunk().await? {
// Do something with chunk: Bytes
}
// Done
在另一边,我有s3::Bucket
(rust-s3
crate),它的方法put_object_stream
需要tokio::io::AsyncRead
。如何使它们一起工作,而不将整个文件保存在内存或磁盘上?
1条答案
按热度按时间fcg9iug31#
如果你有一个多部分的
Field
,并想将它用作tokio::io::AsyncRead
类型,你可以使用tokio_util::io::StreamReader
,因为Field
实现了Stream<Item = Result<Bytes, MultipartError>>
。不过,由于AsyncRead
的接口使用std::io::Error
,因此您必须首先将MultipartError
转换为std::io::Error
。