允许客户端从ftp rails下载文件

时间:2014-07-24 08:13:00

标签: ruby-on-rails url ftp

我正在使用rails 4开发一个Web应用程序,而我现在面临一个小问题。

我想让网站的用户能够通过点击链接从ftp下载文件。我决定继续这个:

def download

  @item=Item.find(params[:id])
  @item.dl_count += 1
  @item.save
  url = @item.file_url.to_s    
  redirect_to url and return

end

而且,基本上,这在我看来:

<%= link_to 'DL', controller: "items", action: "download"%>

然而,我对此并不十分满意,因为它会产生一些错误,例如单击链接创建两个GET方法,一个响应403 Forbidden,另一个响应302发现......

你对我如何改进这个有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在Rails中你应该这样做:

def download
    @item=Item.find(params[:id])
    @item.dl_count += 1
    @item.save
    url = @item.file_url.to_s    
    send_file url, type: 'image/jpeg', disposition: 'inline'
end

查看更多信息http://apidock.com/rails/ActionController/DataStreaming/send_file

请注意,send_file只能从本地文件系统发送。

如果您需要从http://example.com/apps/uploads/tfm.zip获取远程源(应该是安全位置)的文件并避免将此文件存储在服务器内存中,您可以先将文件保存在#{RAILS_ROOT} / tmp /或system / tmp中,然后send_file

data = open(url)
filename = "#{RAILS_ROOT}/tmp/my_temp_file"

File.open(filename, 'w') do |f|
    f.write data.read
end

send_file filename, ...options...

如果Rails无法读取文件,则应检查文件权限