【发布时间】:2016-06-21 20:24:22
【问题描述】:
这里的一个很好的答案解释了如何在 Ruby 中下载文件而不将其加载到内存中:
https://stackoverflow.com/a/29743394/4852737
require 'open-uri'
download = open('http://example.com/image.png')
IO.copy_stream(download, '~/image.png')
我将如何验证下载文件的 IO.copy_stream 调用实际上是否成功 - 这意味着下载的文件与我打算下载的文件完全相同,而不是下载了一半的损坏文件? documentation 说 IO.copy_stream 返回它复制的字节数,但是当我还没有下载文件时,我怎么知道预期的字节数?
【问题讨论】:
-
成功对你意味着什么?磁盘上的字节数正确吗?该文件是其类型的有效文件吗?还有什么?
-
@DaveSchweisguth 抱歉,我认为这会不言自明。下载的文件是 url 上文件的精确副本。我会自动想到 cksum,但我知道那是不可能的。所以也许唯一的选择是验证文件的大小是否匹配?
-
您应该在这里小心:服务器不需要在标头中返回“Content-Length”。
标签: ruby