将reqwest字节流复制到tokio文件中



我正试图将使用reqwest下载的文件复制到一个tokio文件中。此文件太大,无法存储在内存中,因此需要通过bytes_stream()而不是bytes()

我尝试了以下

let mut tmp_file = tokio::fs::File::from(tempfile::tempfile()?);
let byte_stream = reqwest::get(&link).await?.bytes_stream();
tokio::io::copy(&mut byte_stream, &mut tmp_file).await?;

由于而失败

|
153 |     tokio::io::copy(&mut byte_stream, &mut tmp_file).await?;
|     --------------- ^^^^^^^^^^^^^^^^ the trait `tokio::io::AsyncRead` is not implemented for `impl Stream<Item = Result<bytes::bytes::Bytes, reqwest::Error>>`
|     |
|     required by a bound introduced by this call

有没有什么方法可以在流上获得特征AsyncRead,或者以其他方式将这些数据复制到文件中?我使用tokio文件的原因是我后来需要从中异步读取。也许复制到一个常规的std::file,然后将其转换为tokio::fs::file是有意义的?

此方法有效。松散地基于bytes_stream()的例子

注意:您可能希望缓冲此处的写入

use futures::StreamExt;
let mut tmp_file = tokio::fs::File::from(tempfile::tempfile()?);
let mut byte_stream = reqwest::get(&link).await?.bytes_stream();
while let Some(item) = byte_stream.next().await {
tokio::io::copy(&mut item?.as_ref(), &mut tmp_file).await?;
}

相关内容

  • 没有找到相关文章

最新更新