gpt4 book ai didi

rust - 如何在warp中将传入流写入文件?

转载 作者:行者123 更新时间:2023-12-03 11:38:46 25 4
gpt4 key购买 nike

目标:
服务器应该能够接收二进制数据流并将其保存到文件中。
我收到此错误:

mismatched types

expected `&[u8]`, found type parameter `B`
如何从通用类型 &[u8]获取 B
use warp::Filter;
use warp::{body};
use futures::stream::Stream;

async fn handle_upload<S, B>(stream: S) -> Result<impl warp::Reply, warp::Rejection>
where
S: Stream<Item = Result<B, warp::Error>>,
S: StreamExt,
B: warp::Buf
{
let mut file = File::create("some_binary_file").unwrap();

let pinnedStream = Box::pin(stream);
while let Some(item) = pinnedStream.next().await {
let data = item.unwrap();
file.write_all(data);
}
Ok(warp::reply())
}

#[tokio::main]
async fn main() {
pretty_env_logger::init();

let upload = warp::put()
.and(warp::path("stream"))
.and(body::stream())
.and_then(handle_upload);

warp::serve(upload).run(([127, 0, 0, 1], 3030)).await;
}

最佳答案

B实现了warp::Buf,它是从bytes crate重新导出的。它具有.bytes()方法,该方法返回可能有效的&[u8]
但是,文档说.bytes()返回的片段可能比实际包含的片段短。因此,您可以在串流.bytes()时调用.advance().has_remaining()流,或将其转换为Bytes并将其发送到文件:

let mut data = item.unwrap();
file.write_all(data.to_bytes().as_ref());

关于rust - 如何在warp中将传入流写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64515526/

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