Rails如何不通过控制器提供文件下载?

Posted

技术标签:

【中文标题】Rails如何不通过控制器提供文件下载?【英文标题】:Rails how to provide file download not through controller? 【发布时间】:2012-01-11 17:04:04 【问题描述】:

我想列出本地文件夹中文件的文件下载链接 当我使用这个 <a href="/home/tmpfile.txt">download_link</a> 它抱怨 没有路由匹配 [GET] "/home/tmpfile.txt" 和 也得到 没有路由匹配 [GET] "/home/tmpfile.txt" 添加get "/home/tmpfile.txt" 到config/route.rb 不能解决问题

我不想在控制器中使用 send_file 函数,因为我有很多文件 我正在寻找这样的东西ftp://ftp.ncbi.nih.gov/pub/mmdb/cdd/

有人有简单的解决方案吗?

【问题讨论】:

【参考方案1】:

/home/tmpfile.txt 是您的文件系统中的路径还是服务器虚拟文件系统中的路径? 如果它是文件系统中的路径,您需要将其移动到 public 文件夹,尽管它在网络服务器根目录中可用!

【讨论】:

我将文件移至公用文件夹,现在可以使用了。谢谢!有什么方法可以链接到系统路径而不是将文件放在公用文件夹中? 但是rails没有我上面给出的链接的默认文件夹树视图吗? public 是公共文件的 Rails 服务器的默认根目录! 当我点击下载链接时,它会在新窗口中打开文件,而不是弹出下载对话框。如何让它保存文件而不是打开它? 这是因为浏览器可以解释 .txt 文件。当您希望将其作为下载推送到客户端时,您必须使用 send_file!

以上是关于Rails如何不通过控制器提供文件下载?的主要内容,如果未能解决你的问题,请参考以下文章

通过 Rails 2.3 使用 x-sendfile 通过 Nginx 提供大文件

如何通过 Rails 中的 JSON 接口上传文件

如何在rails上的ruby上传文件?

从 jquery 将数据发布到 rails 控制器不起作用

通过邮递员通过 API 使用 Rails 主动存储上传文件(.pdf、.jpg 等)? (不通过 Rails 视图)

Rails - 查看文件 - 如何避免每个控制器操作一个 html 文件和一个 js 文件?