我当时正在考虑在Ruby中下载脚本,其中大多数最终都是这样的:
File.open(fileName, 'wb') do |output|
open(@url) do |data|
output.write(data.read)
end
end
这种方法似乎打开一个流并完全下载文件,最后将数据保存到文件中...... 有没有办法让代码定期将ALREADY DOWNLOADED数据保存到文件中?
例如,在100MB Youtube视频中,我希望脚本将每下载1MB的内容保存到文件中并继续执行此操作,直到下载完成...
这样你可以用合适的播放器打开文件,然后在下载完成之前播放它。
...谢谢
答案 0 :(得分:2)
OpenURI
似乎在将整个文件传递给块之前读取了整个文件,但您可以使用Net::HTTP
来stream the response body:
require 'net/http'
uri = URI(@url)
Net::HTTP.start(uri.host, uri.port) do |http|
request = Net::HTTP::Get.new uri
http.request request do |response|
open file_name, 'w' do |io|
io.sync = true
response.read_body do |chunk|
io.write chunk
end
end
end
end
请注意IO#sync=
调用以设置“同步模式”。