gpt4 book ai didi

rust - 从流 “FramedRead”如何在每个 block 中如何 “do something”

转载 作者:行者123 更新时间:2023-12-03 11:45:02 28 4
gpt4 key购买 nike

我想使用 crate indicatif显示文件的上传进度,我正在使用reqwest异步上传文件,如下所示:

use tokio::fs::File;
use tokio_util::codec::{BytesCodec, FramedRead};

let file = File::open(file_path).await?;
let stream = FramedRead::new(file, BytesCodec::new());
let body = Body::wrap_stream(stream);
client.put(url).body(body)
进度条的实现方式如下:
use indicatif::ProgressBar;

let bar = ProgressBar::new(1000);
for _ in 0..1000 {
bar.inc(1);
// ...
}
bar.finish();
如何从 stream:
let stream = FramedRead::new(file, BytesCodec::new());
// how on every chunk do X ?
let body = Body::wrap_stream(stream);
每次互动都可以调用 bar.inc(1)吗?
从文档中,我看到有一个 read_buffer,但是如何遍历它,以便我可以使用它来调用自定义函数,或者还可以计算发送的字节数(例如,到目前为止,我可以显示“已发送的字节数”)。

最佳答案

例如,您可以使用 TryStreamExt::inspect_ok ,当消耗该项目时,它将调用流中每个Ok(item)的引用的闭包。

use futures::stream::TryStreamExt;
use tokio_util::codec::{BytesCodec, FramedRead};

let stream = FramedRead::new(file, BytesCodec::new())
.inspect_ok(|chunk| {
// do X with chunk...
});

let body = Body::wrap_stream(stream);

关于rust - 从流 “FramedRead”如何在每个 block 中如何 “do something”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63367279/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com