如何将多个文件同时下载到服务器并检查上传过程(我的意思是剩下的时间)
在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调用以序列化格式发送表单数据,此控制器逐个下载所有文件。
使用此代码我必须等待,直到所有文件都被下载到显然不可接受的文件夹。(我的意思是客户端要求我通过同时下载所有文件来减少等待时间)
有没有办法完成它,我的所有代码都是自定义的,并没有使用任何宝石
答案 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)
让我回答问题的并行文件下载部分。您可以为此使用Typhoeus或em-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