是否可以在 Rust 中多次重用 HTTP 请求主体而不将其读入内存?

问题描述 投票:0回答:0

我的需求是大文件上传,服务器实现可以是

actix-web
(或者
hyper
,如果其他实现更合适),使用
HTTP/1.1
。在
HTTP/1.1
中,服务器只能读取一次文件上传数据流,而我想在不将文件数据流读入内存的情况下计算文件的
MD5
SHA-1
SHA-256
(或
BLAKE3
),然后上传到S3。如果有并行计算的方案就更好了,但是可能会更复杂,关键还是流的复用。

最好不要用一个

channel
来实现,因为stream会流经多个
channel
来计算Checksum,这可能比重用stream同时计算性能要低

这里需要基于Rust 2021 Edition,

actix-web
4.x版本(最新的是4.3.0),如果使用
tokio
,至少要1.0.0+(我目前是1.25 .0)。这是因为 Rust 中库版本的兼容性太差,各个小版本之间可能存在 API 不兼容的情况。

请问我的需求可以用Rust实现吗?在Go中,似乎除了

io.Pipe
没有更好的解决方案,但是
io.Pipe
的表现看起来并不好

非常感谢您的建议和耐心等待!

rust file-upload checksum rust-tokio actix-web
© www.soinside.com 2019 - 2024. All rights reserved.