我已经阅读了大量的StackOverflow主题和教程,而且我还没有找到一个好的,简单的解释,了解如何允许用户从您的文件中下载文件站点。
我想要做的就是添加一个链接到我的一个视图,点击后下载文件。
我想明白:
public
?link_to
?routes
需要做些什么?它只是get
的{{1}}?谢谢!
答案 0 :(得分:2)
在简单的场景中,您不需要控制器来下载文件。只需将文件保存到const size_t n = q.size();
for (size_t i = 0; i < n; ++i)
std::cout << q.dequeue() << std::endl;
文件夹即可。公用文件夹是静态资源的默认文件夹,存储有编译的js,css,图像文件,robot.txt等。
如果您有文件public
。把它放到monthly-report.doc
。
在视图public/reports/monthly-report.doc
答案 1 :(得分:1)
基本上有两种情况:
将其放在/public
目录中。请注意,这是网络根目录 - 因此,如果您的文件位于/public/foo/bar.baz
,则会使用<%= link_to 'A file', '/foo/bar.baz' %>
链接到该文件。
不需要路由或控制器,因为我们只是从服务器公共目录提供静态文件。
在此示例中,我们动态地为/downloads
中存储的文件提供服务。
# routes.rb
resources :downloads, only: [:show]
class DownloadsController < ApplicationController
# do your authentication logic here
# GET /downloads/:id
# @example
# GET /downloads/foo.bar would download a file stored at
# /downloads/foo.bar
# @raise [ActiveRecord::RecordNotFound] if the file does not exist.
# This causes a 404 page to be rendered.
def show
fn = Rails.root.join('downloads', params[:id])
raise ActiveRecord::RecordNotFound and return unless file.exists?(fn)
send_file(fn)
end
end
通过使用Rails提供下载服务,我们可以应用我们想要的任何访问控制规则。
答案 2 :(得分:0)
link_to
与任何其他链接相同。
如果您想将其存储在公共场所,请在您想要的任何控制器操作中执行此操作。
send_file File.join(Rails.root, 'public', 'file.extension')
您可以创建一个下载控制器并在索引中指定,然后只需link_to 'Download', download_index_path
等。
如果您尝试发送用户输入的文件名,则必须对其进行清理。如果它&#34;硬编码&#34;就像上面的例子一样,那你很好。