Ruby-在下载完成之前保存文件部分

Ruby-在下载完成之前保存文件部分,ruby,download,download-manager,Ruby,Download,Download Manager,我正在考虑用Ruby下载脚本,大多数脚本都是这样的: File.open(fileName, 'wb') do |output| open(@url) do |data| output.write(data.read) end end 这种方法似乎是打开一个流并完全下载文件,最后将数据保存到文件中。。。 有没有办法让代码定期将已下载的数据保存到文件中 例如,在100MB的Youtube视频中,我希望脚本将每下载1MB的视频保存到文件中,并继续执行此操作,直到下载完成 通过这种方

我正在考虑用Ruby下载脚本,大多数脚本都是这样的:

File.open(fileName, 'wb') do |output|
  open(@url) do |data|
    output.write(data.read)
  end
end
这种方法似乎是打开一个流并完全下载文件,最后将数据保存到文件中。。。 有没有办法让代码定期将已下载的数据保存到文件中

例如,在100MB的Youtube视频中,我希望脚本将每下载1MB的视频保存到文件中,并继续执行此操作,直到下载完成

通过这种方式,您可以使用合适的播放器打开文件,并在下载完成之前播放它


谢谢…

OpenURI
似乎在将其传递到块之前读取了整个文件,但是您可以使用
Net::HTTP
来:


请注意设置“同步模式”的呼叫。

谢谢!顺便问一下,“io.sync”在代码中起什么作用?链接文档中写道:“当sync模式为true时,所有输出都会立即刷新到底层操作系统,并且不会在内部进行缓冲。”。换句话说:您的文件随着下载的进行而增长。
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