【问题标题】:ruby on rails3 retrieve files from a remote server and make it available for downloadruby on rails3 从远程服务器检索文件并使其可供下载
【发布时间】:2014-11-04 22:48:26
【问题描述】:

我在远程服务器上的某个目录中有一些文件,例如:

171.XX.XX.XXX/test/data/file1.zip
171.XX.XX.XXX/test/data/file2.zip

因此,在我的 Web 应用程序中,当用户访问页面时(例如 www.mysite.com/downloads),我想从远程服务器检索一些文件并让用户可以下载。

所以基本上,网页会喜欢

file1.zip
file2.zip

当用户点击一个时,它会将远程文件下载到他的本地计算机上。

在 Ruby on Rails 上完成此任务的最佳方法是什么?

编辑:正如 cmets 中所指出的,通过服务器而不是直接链接到远程服务器是有意义的。

EDIT2:“open-uri”是否适用于非 http url?

当我尝试时

url_file_path = open('172XX.XX7/test/data/my_file.zip').read
send_data url_file_path, filename: test.zip, type: 'application/octet-stream'

Errno::ENOENT: 没有这样的文件或目录

【问题讨论】:

  • 我是否正确假设您不想直接链接到远程文件?您希望它改为通过您的服务器吗?
  • @substantial,你是对的。我应该在我最初的问题中提到这一点。

标签: ruby-on-rails ruby


【解决方案1】:

您需要先“下载”远程文件。在你的控制器中有这样的东西

your_controller.rb

def download
  send_data remote_file(params[:url]), type: 'application/octet-stream'
end

private
def remote_file(url)
  open(url).read
end

你可能需要

require 'open-uri'

通常你在控制器顶部执行此操作

现在你可以定义路线了

get 'download' => 'your_controller#download', as: :download

现在你可以在前端使用

= link_to 'Download file1.zip', download_path(url: 'http://171.XX.XX.XXX/test/data/file1.zip')

【讨论】:

  • 感谢@marvwhere,我不断收到此错误“Errno::ENOENT”,“没有这样的文件或目录”。是不是因为无法通过'http'访问远程服务器?
  • 是的,没错,看起来我错过了“none http”部分。所以你只有纯ssh?检查这个:stackoverflow.com/questions/5644110/…
猜你喜欢
  • 2012-06-15
  • 2015-11-23
  • 2016-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-21
相关资源
最近更新 更多