2011-07-20 12 views
12

मेरे पास रेल लिंक सहायक है जो क्लिक होने पर वॉलपेपर डाउनलोड करता है। लेकिन छवि तुरंत डाउनलोड होने की बजाय ब्राउज़र में लोड हो रही है।एक छवि को तुरंत डाउनलोड करने के लिए रेल 'link_to' ब्राउज़र में इसे खोलने के बजाय

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

लेकिन एक ही समय में मैं एक LINK_TO रेल सहायक कि .exe प्रारूप का एक स्क्रीनसेवर डाउनलोड करता है, लेकिन यहाँ यह रूप में inteded काम करता है: फ़ाइल तुरंत डाउनलोड किया जा रहा।

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

मुझे क्या जोड़ना चाहिए या ऐसा करना चाहिए ताकि ब्राउज़र में छवियां खोली जाएंगी लेकिन इसके बजाय तुरंत डाउनलोड हो जाए?

धन्यवाद!

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

send_file विधि अगर आप से फ़ाइल की सेवा कर रहे आप उचित रूप से इस हेडर स्थापित करने के लिए अनुमति देगा:

+1

काफी कुछ इस एक ब्राउज़र विशिष्ट मुद्दा, नहीं एक वेब ढांचे मुद्दा है के साथ एचटीएमएल 5 डाउनलोड विशेषता का उपयोग कर एक सरल उपाय है। आप किसी ब्राउज़र में EXE नहीं देख सकते हैं, लेकिन आप एक छवि देख सकते हैं। –

उत्तर

11

आम तौर पर, यह करने के लिए स्पष्ट तरीका उचित हेडर जब छवि भेजने स्थापित करने के लिए है फाइल सिस्टम:

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

रेल 3/4

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

क्या होगा यदि लिंक .each पुनरावृत्ति में उत्पन्न होता है, और फ़ाइल नाम गतिशील है। –

25

HTML5 download attribute के साथ ऐसा करने के लिए एक आसान तरीका है।

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

यह निश्चित रूप से अब स्वीकार्य उत्तर होना चाहिए। – taylorthurlow

0

यहाँ पेपरक्लिप

<%= link_to item.name, item.asset.url, download: item.asset.original_filename %> 
संबंधित मुद्दे

 संबंधित मुद्दे