如何创建下载链接
Posted
技术标签:
【中文标题】如何创建下载链接【英文标题】:How to Create Download Link 【发布时间】:2011-05-19 19:13:03 【问题描述】:创建下载链接的最佳方式是什么?还有比以下更好的方法吗?
我正在考虑在视图中使用link_to "Download", :controller => ..., :action => ...", :id => ...
。
将match /documents/download/:id => documents#download
添加到 routes.rb
在控制器中:
def download
send_file ...
end
另外,如果可能的话,我希望用户与链接保持在同一页面上。
谢谢。
【问题讨论】:
您发送的是非常大的文件还是动态生成的文件? @Danny Rockets:是的,文件是动态生成的。 ***.com/questions/6392003/… 【参考方案1】:我将下载操作添加为资源块中的宁静路线。这是我的典型代码:
routes.rb
resources :things do
member do
get :download
end
end
型号:
has_attached_file :document,
:path => ':rails_root/assets/documents/:id/:basename.:extension'
attr_protected :document_file_name, :document_content_type, :document_file_size
控制器:
def download
send_file @thing.document.path, :type => 'application/pdf', :filename => @thing.permalink
end
查看:
<%= link_to 'Download', download_thing_path(@thing) %>
这使用户保持在同一页面上,并且只需使用我建议的名称(我使用永久链接)启动下载。
动态生成是什么意思?它们是由您上传还是由您的应用程序动态创建的?
【讨论】:
我将这个问题解释为任何非静态可用的东西,例如预加载的图标图像或许可文本文件。在我的情况下(文本、文档、pdf)文件是由一组用户生成和上传的;动态方面来自上传的临时性质。 如果我对您的理解正确,那么您下载操作中的 :type 可能是 @thing.document_content_type 而不是我示例中的 'application/pdf'。【参考方案2】:你可以在你的表演动作中加入你的下载逻辑并给出它:
<%= link_to "Download", document_path(document) %>
我很确定 :controller / :action / :id 链接方法不受欢迎。
【讨论】:
修改路径为:match /documents/download/:id => documents#download :as => :document【参考方案3】:我刚刚创建了一个下载 .mp3 链接并在我的 .htaccess 文件中使用。
<Files *.mp3>
ForceType application/octet-stream
Header set Content-Disposition attachment
</Files>
我发现这比任何其他解决方案都容易。
【讨论】:
以上是关于如何创建下载链接的主要内容,如果未能解决你的问题,请参考以下文章
如何通过自动下载链接使用 Python 访问 PDF 文件?