我正在使用带有回形针的rails 4.x.我想确保当用户点击链接下载回形针附件时,会下载文件而不是打开文件。
我正在使用的链接会打开或保存,具体取决于浏览器配置
<%= link_to image_tag("save.gif", document.doc_file.url, :target => "_blank" %>
该链接有时会打开文件而不是下载。
我设置了
的方法helper_method :download
def download
@document= Document.find(39)
send_file ("http://localhost:3000/images/39/Medical_Opportunity_EvaluationForm.pdf?1458068410"),
:filename => @document.doc_file_file_name,
:type => @document.doc_file_content_type,
:disposition => 'attachment'
end
我将网址硬连线进行测试。我还试过了send_file ("http://localhost:3000#{@document.doc_file.url}")
和send_file (@document.doc_file.url)
。都没有工作。
我的链接是
<%= link_to image_tag("save.gif"), download_path(document.id) %>
routes.rb有
match 'documents/download/:id' => 'documents#download',via: [:get, :post], :as => 'download'
当我点击下载链接时,出现错误
ActionController::MissingFile in DocumentsController#download
Cannot read file http://localhost:3000/images/39/Medical_Opportunity_EvaluationForm.pdf
Rails.root: C:/Users/cmendla/RubymineProjects/technical_library
Application Trace | Framework Trace | Full Trace
app/controllers/documents_controller.rb:17:in `download'
如果我将URL放入浏览器的地址栏中,它就可以正常工作。即`http://localhost:3000/images/39/Medical_Opportunity_EvaluationForm.pdf&#39;
答案 0 :(得分:4)
send_file
方法接受服务器上的文件的物理位置,而不是公共网址。因此,以下内容应该有效,具体取决于PDF文件实际所在的位置:
send_file "#{Rails.root}/public/images/39/Medical_Opportunity_EvaluationForm.pdf",
:filename => @document.doc_file_file_name,
:type => @document.doc_file_content_type,
:disposition => 'attachment'
如果这是一个回形针文档,path
方法应该有效:
send_file @document.doc_file.path,
:filename => @document.doc_file_file_name,
:type => @document.doc_file_content_type,
:disposition => 'attachment'
有关详细信息,请参阅the docs。