2013-09-02 6 views
20

फ़ायरफ़ॉक्स और क्रोम में यह लिंक संपत्ति "डाउनलोड = img.jpg" ठीक काम करती है और एक नए टैब या पेज की बजाय डाउनलोड विंडो दिखाती है।एक नए पेज में खोलने के बजाय सफारी और आईई डाउनलोड छवि कैसे बनाएं?

<a href="img.jpg" download="img.jpg">Download Image</a> 

लेकिन सफारी और आईई में यह लिंक मुझे एक नया पृष्ठ देता है।

तो सफारी और आईई ब्राउज़र के साथ इसे संभालने के लिए एक सरल और प्रभावी वर्कफ़्लो क्या है?

+1

छवि के साथ कार्यरत शीर्षलेख बदलें। –

+0

@RichBradshaw तेज़ उत्तर के लिए धन्यवाद! अब मुझे सुराग मिला है, जैसे http://www.electrictoolbox.com/image-headers-php/ लेकिन क्या सरल लिंक के साथ हेडर को संभालने का आसान तरीका है और इसे दबाए जाने के बाद? क्योंकि अब मेरे पास 'Download' –

+0

नहीं हैं, तो डाउनलोड विशेषता बहुत अच्छी है, और कई स्थानों पर समर्थित नहीं है। –

उत्तर

14

क्या आप अपाचे सर्वर पर काम कर रहे हैं? यदि हां, तो आप सिर्फ अपनी .htaccess फाइल करने के लिए इस जोड़ सकते हैं:

RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{QUERY_STRING} fdl=1 
RewriteRule .? - [T=application/octet-stream] 

चेकों यह एक फ़ाइल चेकों अगर पैरामीटर FDL = 1 ओकटेट धारा/बल डाउनलोड के रूप में आउटपुट querystring में है देखने के लिए

अब जब आप उस साइट में कुछ भी डाउनलोड करना प्रारंभ करने ब्राउज़र चाहते हैं, बस यूआरएल पर पैरामीटर डाल:

<a href="img.jpg?fdl=1">Download Image</a> 

एक आईआईएस विंडोज़ सर्वर पर एक ही बात करने के लिए web.config आउटबाउंड नियम जोड़ने:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
     <rewrite> 
      <outboundRules> 
       <rule name="Force Download"> 
        <match serverVariable="RESPONSE_Content_Disposition" pattern=".?" negate="false" /> 
        <action type="Rewrite" value="application/octet-stream" replace="true" /> 
        <conditions> 
         <add input="{QUERY_STRING}" pattern="fdl=1" /> 
        </conditions> 
       </rule> 
      </outboundRules> 
     </rewrite> 
    </system.webServer> 
</configuration> 

संपादित करें (2016/10/04):

download विशेषता की तरह लग रहा है अभी भी not fully adopted सभी ब्राउज़रों द्वारा होता है।

एक जावास्क्रिप्ट/ब्राउज़र आधारित कार्यान्वयन आप FileSaver.js जो ब्राउज़रों कि इसका समर्थन नहीं करते में कार्यक्षमता को बचाने के लिए एक polyfill है पर दिखाई दे सकता है के लिए। हालांकि इसमें सही कवरेज नहीं है।

+0

दरअसल यह अब के लिए सबसे अच्छा जवाब है, क्योंकि मैं इसमें अपाचे सर्वर का उपयोग कर रहा हूं मामला। धन्यवाद! –

+0

मुझे ऐसा उत्तर देना अच्छा लगेगा जिसमें सर्वर शामिल न हो, क्योंकि मैं क्लाइंट को खोलने के बजाए बेस 64 छवि डाउनलोड करने की कोशिश कर रहा हूं, और बेस 64 अपाचे से बातचीत नहीं करेगा। – Jaketr00

+0

क्या यह उपयोगकर्ताओं को किसी भी फ़ाइल को डाउनलोड करने की अनुमति नहीं देगा? – spaceman

-1

PHP जैसी सर्वर-साइड भाषा का उपयोग करना सबसे आसान है। इस पृष्ठ पर गहराई से यह वास्तव में अधिक चर्चा की गई है, जिसमें शीर्षलेखों को हेरफेर करने के लिए कुछ परीक्षण कोड शामिल हैं। दुर्भाग्यवश, आईई और सफारी पकड़ने तक ये एकमात्र समाधान हैं।

Refrence:

+0

@SITDGNNymall लिंक के लिए धन्यवाद। तो इस समस्या के बारे में पहले से ही अच्छी चर्चा थी। मुझे लगता है कि http://modernizr.com/download/#-a_download तरीका ऐसा करने के लिए काफी आसान है। इसका परीक्षण करने की आवश्यकता है। –

+0

मुझे इस विषय के बारे में एक और अच्छी पोस्ट मिली http://stackoverflow.com/questions/6796974/force-download-an-image-using-javascript –

0

यह आईई में जावास्क्रिप्ट के साथ ऐसा करने का एक तरीका है। हालांकि, मुझे सफारी के लिए अभी तक समाधान नहीं मिला है

var canvas = document.createElement('canvas'); 
var img = document.createElement('img'); 
img.onload = function(e) { 
    canvas.width = img.width; 
    canvas.height = img.height; 
    var context = canvas.getContext('2d'); 
    context.drawImage(img, 0, 0, img.width, img.height); 
    window.navigator.msSaveBlob(canvas.msToBlob(),'image.jpg'); 
} 
img.src = 'img.jpg; 
संबंधित मुद्दे