2011-07-20 113 views
12

我有一個link_to的助手,點擊時下載壁紙。但圖像在瀏覽器中加載而不是立即下載。Rails的'link_to'立即下載圖像,而不是在瀏覽器中打開它

<%= link_to "1920x1080", @download.wallpapers[1].wallpaper.url %> 

但在同一時間,我有一個滑軌的link_to幫手下載.exe格式的屏幕保護程序,但在這裏它的工作原理爲inteded:文件被即時下載

<%= link_to "720p", @download.screensavers.first.screensaver.url %> 

我應該怎麼增加或怎麼做才能讓圖像不會在瀏覽器中打開,而是立即下載?

謝謝!

+1

相當肯定,這是一個瀏覽器的具體問題,而不是一個Web框架問題的簡單解決方案。您無法在瀏覽器中查看EXE,但可以查看圖像。 –

回答

11

一般情況下,要做到這一點最乾淨的方法是設置發送圖像時適當的頭:

Content-Disposition: attachment; filename=&lt;file name.ext&gt; 

的由send_file方法可以讓你,如果你正在處理的是文件的適當設置這個報頭文件系統:

http://api.rubyonrails.org/classes/ActionController/Streaming.html#method-i-send_file

如果文件被存儲在數據庫中,你可以使用SEND_DATA代替:

http://api.rubyonrails.org/classes/ActionController/Streaming.html#method-i-send_data

+0

:(延遲14秒 – vinceh

+0

謝謝你的回答!!! – neilmarion

13

您可以在控制器中處理圖片鏈接,而不是將圖片鏈接放入您的標籤。然後在你的控制器,你可以這樣做

send_file @download.wallpapers[1].wallpaper.url, :type => 'image/jpeg', :disposition => 'attachment' 

this

+0

謝謝你的回答!!! – neilmarion

+0

不要忘了標記正確的答案:) – vinceh

+0

更好的鏈接:http://apidock.com/rails/ActionController/DataStreaming/send_file – montrealmike

8

Rails的四分之三:

在路線:

在控制器
get "home/download_pdf" 

def download_pdf 
    send_file(
    "#{Rails.root}/public/your_file.pdf", 
    filename: "your_custom_file_name.pdf", 
    type: "application/pdf" 
) 
end 

鑑於:

<%= link_to 'Download PDF', home_download_pdf_url %> 
+1

如果鏈接是在每個迭代中生成的,並且文件名是動態的,該怎麼辦? –

25

還有一個更簡單的方法與HTML5 download attribute做到這一點。

<%= link_to 'Download existing avatar', @user.avatar(:original), download: "User_#{@user.id}_avatar" %> 
+2

這絕對是現在可以接受的答案。 – taylorthurlow

0

下面是一個使用HTML5下載屬性與回形針

<%= link_to item.name, item.asset.url, download: item.asset.original_filename %> 
相關問題