多个同时远程文件下载到rails上的服务器ruby

时间:2015-08-28 13:19:46

标签: ruby-on-rails ruby ruby-on-rails-3 file-upload

如何将多个文件同时下载到服务器并检查上传过程(我的意思是剩下的时间)

在rails应用程序上我有多个文本字段,它们用于远程文件URL,如www.example.com/abc.pdf等,这些文件应该下载到temp_uploads文件夹。

为此,我在 remotefiles controller 中编写了代码,如下所示。

def remotefiles
    params[:reference_file_url].each do |rfile|
        temp_file = File.new("/public/temp_uploads", "w")
        open(temp_file, 'wb') do |file|
            file << open(rfile).read()
        end
    end
end

其中 rfile 是远程文件网址。

我还定义了路径remotefiles来在ajax中调用它

我的ajax调用以序列化格式发送表单数据,此控制器逐个下载所有文件。

使用此代码我必须等待,直到所有文件都被下载到显然不可接受的文件夹。(我的意思是客户端要求我通过同时下载所有文件来减少等待时间)

有没有办法完成它,我的所有代码都是自定义的,并没有使用任何宝石

2 个答案:

答案 0 :(得分:1)

对于本地文件上传: http://blueimp.github.io/jQuery-File-Upload/

用于远程文件下载: 您可以使用名为Sidekiq的gem来编写后台作业,该作业将使用http来下载每个文件。然后通过浏览器中的ajax更新Redis状态并轮询该状态。

要下载文件,您可以使用HTTPParty

require "httparty"

File.open("myfile.txt", "wb") do |f| 
  f.write HTTParty.get(remote_file_url).response
end

答案 1 :(得分:0)

让我回答问题的并行文件下载部分。您可以为此使用Typhoeusem-http-request之类的库

#Typhoeus
hydra = Typhoeus::Hydra.new
params[:reference_file_url].each do |rfile|
  request = Typhoeus::Request.new(rfile, followlocation: true)
  request.on_complete do |response|
    #do_something_with response
  end
  hydra.queue(request)
end
hydra.run