【问题标题】:Multiple simultaneous remote file downloads to server ruby on rails多个同时远程文件下载到服务器 ruby​​ on rails
【发布时间】:2015-11-23 04:10:32
【问题描述】:

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

在 Rails 应用程序中,我有多个文本字段,它们用于远程文件 url,如 www.example.com/abc.pdf 等,所有文件都应下载到 temp_uploads 文件夹。

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

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 是远程文件 url。

我还定义了路由远程文件以在 ajax 中调用它

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

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

有什么办法可以完成,我所有的代码都是自定义的,没有使用任何 gem

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 它用于从本地系统上传文件,是否也可以将其用于远程文件?
    • 仅限本地系统。抱歉,您正在寻找从 URL 下载文件,而不是上传。为此,我会使用像 Sidekiq 这样的后台工作人员,然后使用像 HTTParty 这样的 http 库下载每个文件。对于多个文件,您可以使用每个文件之后的状态更新 Redis,并通过 ajax 轮询该状态客户端。
    • 我一定会试一试的!!
    • 我检查了 httparty 及其工作正常,但我可以使用它作为后端进程上传文件还是默认情况下这样做。还有一种方法可以获取上传状态并显示进度条吗?
    【解决方案2】:

    让我回答问题的并行文件下载部分。您可以为此使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-31
      • 2012-08-14
      • 2013-12-19
      • 2014-07-06
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多