【发布时间】:2020-04-03 05:25:02
【问题描述】:
我有一个BytesMut 类型的值(来自bytes)
此值的来源是我从远程源(在本例中为 AWS S3 存储桶)下载的文件。 我想将这些字节(它是一个图像)存储(写入)到一个文件中,以便我可以继续读取图像文件,进行一些处理等。
最好/最简单的方法是什么?
我看过这个question,但它并没有帮助我,因为我认为它正在做与我正在尝试的相反的事情。 任何帮助将不胜感激,谢谢!
【问题讨论】:
-
A
BytesMutderefs 到一个切片中,因此您可以使用&b[..]访问其全部内容。File::create("filename").write_all(&b[..])?是你要找的吗? -
查看代码的相关部分会很有用。有一些我不清楚的事情,例如如果您只想再次读取数据,为什么要将数据写入磁盘?如果由于某种原因需要将数据写入磁盘,为什么要先将其下载到内存,而不是直接将其流式传输到文件?如果文件不是太大,这并不重要,但无论如何共享实际代码通常会产生更有用的答案。
-
是的 @user4815162342 这行得通,非常感谢!我使用
as_ref()将其转换为 &[u8] 然后我可以将其写入文件。 -
@SvenMarnach 这些都是好问题,我现在正试图自己找出答案。感谢您指出这些东西。我已经有现有的函数,在另一个模块中使用不同的库,它接受图像的路径然后将其读入。也许为了分离关注点,我会这样做。虽然,它确实有一些开销,并且需要我在完成后删除我下载的每个文件(因为我希望这段代码能够处理数千张图像)。
-
@KahlilAbreu 听起来读取图像的函数应该接受并实现
Read(或者可能是AsyncRead)而不是路径。这将允许您传递文件对象或缓冲区对象,甚至是 HTTP 连接的数据流。
标签: rust rust-tokio