2011-07-20 11 views
12

Mam pomocnik Railsowy, który pobiera tapetę po kliknięciu. Ale obraz jest ładowany w przeglądarce, a nie pobierany natychmiast.Rails 'link_to', aby natychmiast pobrać obraz Zamiast otwierania go w przeglądarce

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

Ale jednocześnie mam pomocnika link_to Rails, który pobiera wygaszacz ekranu o formacie .exe ale tutaj to działa jak inteded: plik jest pobierany natychmiast.

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

Co należy dodać lub zrobić, aby obrazy nie były otwierane w przeglądarce, ale należy je natychmiast pobrać?

Dzięki!

+1

Dość pewne jest to problem specyficzny przeglądarka, a nie kwestia web-ramy. Nie można wyświetlić pliku EXE w przeglądarce, ale można wyświetlić obraz. –

Odpowiedz

11

Generalnie najczystszym sposobem, aby to zrobić, to ustawić odpowiedni nagłówek podczas wysyłania obrazu:

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

Sposób send_file pozwoli Ci ustawić ten nagłówek odpowiednio jeśli służąc plik z System plików:

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

Jeśli plik jest przechowywany w bazie danych, można użyć send_data zamiast:

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

+0

:(14 sekund późno – vinceh

+0

Dziękuję za odpowiedź !!! – neilmarion

13

Zamiast umieszczać link obrazu w tagu, można go obsługiwać w kontrolerze. A następnie w kontrolerze można zrobić coś jak

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

Read this

+0

Dziękuję za odpowiedź !!! – neilmarion

+0

Nie zapomnij zaznaczyć właściwą odpowiedź :) – vinceh

+0

lepszy link: http://apidock.com/rails/ActionController/DataStreaming/send_file – montrealmike

8

Rails 3/4:

w trasach:

get "home/download_pdf" 

w kontrolerze:

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

w widoku:

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

Co jeśli link jest generowany w .each iteracji, a nazwa pliku jest dynamiczna. –

25

Jest łatwiejszy sposób to zrobić z HTML5 download attribute.

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

To zdecydowanie powinno być teraz akceptowaną odpowiedzią. – taylorthurlow

0

Oto proste rozwiązanie za pomocą atrybutu pobierania HTML5 ze spinacza

<%= link_to item.name, item.asset.url, download: item.asset.original_filename %> 
Powiązane problemy