reqwest 发送带有非常大附件的多部分表单
reqwest send multipart form with very large attachment
正如 所解释的,可以使用 Body::wrap_stream(read_stream)
到 POST 文件的内容,而无需先将整个内容读入内存。
我们如何做与 reqwest::multipart::Form
的一部分相同的事情?以下代码因错误 the trait `From<&mut dyn Stream<Item = std::result::Result<Vec<u8>, std::io::Error>>>` is not implemented for `Body`
.
而失败
let metadata_json = "{ \"file_owner\": \"bob smith\" }";
let metadata_part = reqwest::multipart::Part::text(metadata_json);
let read_stream : Stream<Item = std::io::Result<Vec<u8>> = my_file_stream;
let stream_part = reqwest::multipart::Part::stream(read_stream);
let multipart_form = reqwest::multipart::Form::new()
.part("metadata", metadata_part)
.part("file", stream_part);
我尝试提供一个只调用 Body::wrap_stream
的 From
的实现,但这是被禁止的,因为 From
和 Body
都没有在我自己的代码中定义。
我相信您需要像这样使用 Body::wrap_stream
:
let stream_part = reqwest::multipart::Part::stream(Body::wrap_stream(read_stream));
正如 Body::wrap_stream(read_stream)
到 POST 文件的内容,而无需先将整个内容读入内存。
我们如何做与 reqwest::multipart::Form
的一部分相同的事情?以下代码因错误 the trait `From<&mut dyn Stream<Item = std::result::Result<Vec<u8>, std::io::Error>>>` is not implemented for `Body`
.
let metadata_json = "{ \"file_owner\": \"bob smith\" }";
let metadata_part = reqwest::multipart::Part::text(metadata_json);
let read_stream : Stream<Item = std::io::Result<Vec<u8>> = my_file_stream;
let stream_part = reqwest::multipart::Part::stream(read_stream);
let multipart_form = reqwest::multipart::Form::new()
.part("metadata", metadata_part)
.part("file", stream_part);
我尝试提供一个只调用 Body::wrap_stream
的 From
的实现,但这是被禁止的,因为 From
和 Body
都没有在我自己的代码中定义。
我相信您需要像这样使用 Body::wrap_stream
:
let stream_part = reqwest::multipart::Part::stream(Body::wrap_stream(read_stream));