如何创建下载链接

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>

我发现这比任何其他解决方案都容易。

【讨论】:

以上是关于如何创建下载链接的主要内容,如果未能解决你的问题,请参考以下文章

如何在 HTML 中为移动页面创建图像下载链接?

如何生成下载链接

如何通过自动下载链接使用 Python 访问 PDF 文件?

如何在Javascript中创建动态文件+链接以供下载? [复制]

html 如何制作下载链接?

我想创建一个链接或 url 来下载我的视频,比如如果有人按下链接,视频应该下载到他们的手机中