2009-03-04 13 views
23

का उपयोग कर फ़ाइल के रूप में टेक्स्टरेरा सामग्री डाउनलोड करें। मुझे एक "डाउनलोड" बटन बनाने के लिए कहा जा रहा है जो फ़ाइल के समान पृष्ठ पर टेक्स्टरेरा की सामग्री डाउनलोड करता है, ब्राउज़र के "सेव एज़ ... "संवाद दिखा रहा है। प्रतिलिपि/पेस्ट नौकरी ठीक करेगी, लेकिन यह एक "आवश्यकता" है।केवल जावास्क्रिप्ट (कोई सर्वर-साइड)

अभी, मैं केवल टेक्स्टरेरा की सामग्री को सर्वर पर पोस्ट कर रहा हूं, जो उन्हें Content-disposition: attachment पर थप्पड़ मारता है। क्या क्लाइंट-साइड जावास्क्रिप्ट के साथ ऐसा करने का कोई तरीका है?

उत्तर

2

संक्षिप्त उत्तर: यह सकारात्मक नहीं है। आपको इसे सर्वर पर पोस्ट करना होगा, और सर्वर से प्रतिक्रिया "सामग्री-स्वभाव: अनुलग्नक" हो सकती है।

9

आप window.location = "data:application/octet-stream,"+text को आजमा सकते हैं, लेकिन यह एक तंत्र प्रदान नहीं करता जिसके माध्यम से आप एक नाम सुझा सकते हैं, और आईई की एक अधिकतम यूआरआई की एक बहुत छोटी टोपी है जो एक समस्या हो सकती है।

+2

और यह आईई 6 के साथ भी संभव नहीं है। –

+0

ठंडा। http://en.wikipedia.org/wiki/Data_URI_scheme – Thilo

1

यह एक फ्रेम बनाने, वहाँ सामग्री लिखने, तो IE में document.execCommand('saveas', ...) बुला और मोज़िला में nsIFilePicker के साथ कुछ है, लेकिन मेरा मानना ​​है कि (ब्राउज़र खुद का हिस्सा होने की तरह) है कि कुछ असाधारण विशेषाधिकार की आवश्यकता होगी के द्वारा ही संभव हो सकता है ।

+0

वास्तव में संभव है और किसी विशेष विशेषाधिकार की आवश्यकता नहीं है .. यहां देखें: http://jsfiddle.net/YhdSC/1/ (केवल आईई हालांकि: /) –

+0

हां, विशेषाधिकार भाग फ़ायरफ़ॉक्स के बारे में अधिक था। –

7

कुछ जावास्क्रिप्ट पुस्तकालय थे जो इस तरह की चीज को छोटे एम्बेडेड एसडब्ल्यूएफ फ़ाइल के माध्यम से करते थे। उदाहरण के लिए this one

+1

यह मेरी राय में प्रश्न का उत्तर है। मेरा मतलब है, यह मेरी मदद करता है और इसके लिए धन्यवाद :) –

+0

क्या इस तरह के अन्य पुस्तकालय हैं? – Husman

3

मैं यहाँ एक सरल उपाय पाया: http://www.codingforums.com/archive/index.php/t-181561.html

My text area:<br /> 
<textarea rows='10' cols='80' id='myTextArea' ></textarea> 

<br /><br /> 

Download button: <br /> 
<input value='download' type='button' 
onclick='doDL(document.getElementById("myTextArea").value)' /> 


<script type='text/javascript'> 
function doDL(s){ 
    function dataUrl(data) {return "data:x-application/text," + escape(data);} 
    window.open(dataUrl(s)); 
} 
</script> 

आशा है कि यह मदद मिलेगी।

+0

आप एक अवैध सामग्री प्रकार का उपयोग कर रहे हैं; अनुप्रयोग/ऑक्टेट-स्ट्रीम का कोई प्रभाव नहीं है? –

+0

@CyrLop - भयानक उत्तर जो आपने यहां पोस्ट किया है .... क्या आपको पता है कि फ़ाइल नाम हार्डकोड करने का कोई तरीका है, इसलिए सहेजने वाला संवाद फ़ाइल नाम के साथ खुलता है जिसे उपयोगकर्ता संपादित कर सकता है, लेकिन उदाहरण के लिए, वर्तमान दिनांक - yyyymmdd।टेक्स्ट ? – tamak

21

यह हो सकता है आप के लिए क्या देख रहे: http://thiscouldbebetter.wordpress.com/2012/12/18/loading-editing-and-saving-a-text-file-in-html5-using-javascrip/

यह ब्राउज़र की डाउनलोड संवाद का उपयोग करता है, लेकिन अब केवल एफएफ और क्रोम, और शायद अधिक ब्राउज़रों का समर्थन करता?


संपादित करें:

के रूप में टिप्पणी की मैं लेख से कोड एम्बेड कर देंगे:

function saveTextAsFile() 
{ 
    var textToWrite = //Your text input; 
    var textFileAsBlob = new Blob([textToWrite], {type:'text/plain'}); 
    var fileNameToSaveAs = //Your filename; 

    var downloadLink = document.createElement("a"); 
    downloadLink.download = fileNameToSaveAs; 
    downloadLink.innerHTML = "Download File"; 
    if (window.webkitURL != null) 
    { 
     // Chrome allows the link to be clicked 
     // without actually adding it to the DOM. 
     downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob); 
    } 
    else 
    { 
     // Firefox requires the link to be added to the DOM 
     // before it can be clicked. 
     downloadLink.href = window.URL.createObjectURL(textFileAsBlob); 
     downloadLink.onclick = destroyClickedElement; 
     downloadLink.style.display = "none"; 
     document.body.appendChild(downloadLink); 
    } 

    downloadLink.click(); 
} 
+0

जबकि यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, [यह बेहतर होगा] (http://meta.stackexchange.com/q/8259) यहां उत्तर के आवश्यक हिस्सों को शामिल करने के लिए, और संदर्भ के लिए लिंक प्रदान करें। –

+1

विशेष रूप से चूंकि यहां चीन में वर्डप्रेस अवरुद्ध है ... – Thilo

+0

आज वेबकिट्लर की जांच करने के लिए यह अब उपलब्ध नहीं है। http://caniuse.com/#search=URL यह भी लगता है कि एज अभी भी इस सुविधा का समर्थन नहीं करता है –

3

बिल्कुल एचटीएमएल 5 saveAs समारोह के इस पार ब्राउज़र JavaScript का कार्यान्वयन का उपयोग संभव: https://github.com/koffsyrup/FileSaver.js

यदि आप जो करना चाहते हैं वह टेक्स्ट सहेजना है तो उपरोक्त स्क्रिप्ट काम करता है सभी ब्राउज़रों में (आईई के सभी संस्करणों सहित), कोई एसडब्ल्यूएफ आवश्यक नहीं है।

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