我的需求是大文件上传,服务器实现可以是
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
的表现看起来并不好
非常感谢您的建议和耐心等待!