Ruby - 在下载完成前保存文件部分
Ruby - Save file parts before download finishes
我正在寻找 Ruby 中的下载脚本,其中大部分最终都是这样的:
File.open(fileName, 'wb') do |output|
open(@url) do |data|
output.write(data.read)
end
end
这种方法似乎打开一个流并完全下载文件,最后将数据保存到文件中...
有没有办法让代码定期将已下载的数据保存到文件中?
例如,在一个 100MB 的 Youtube 视频中,我希望脚本将它下载的每 1MB 保存到文件中,并继续执行此操作直到下载完成...
这样您就可以在下载完成前用合适的播放器打开文件并播放。
谢谢...
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=
设置“同步模式”的调用。
我正在寻找 Ruby 中的下载脚本,其中大部分最终都是这样的:
File.open(fileName, 'wb') do |output|
open(@url) do |data|
output.write(data.read)
end
end
这种方法似乎打开一个流并完全下载文件,最后将数据保存到文件中... 有没有办法让代码定期将已下载的数据保存到文件中?
例如,在一个 100MB 的 Youtube 视频中,我希望脚本将它下载的每 1MB 保存到文件中,并继续执行此操作直到下载完成...
这样您就可以在下载完成前用合适的播放器打开文件并播放。
谢谢...
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=
设置“同步模式”的调用。