दिलचस्प पोस्ट
एक जावा कार्यक्रम में एक और जार निष्पादित करें डॉलर ($) में प्रवेश पासवर्ड स्ट्रिंग चर के रूप में माना जाता है मेरी जावास्क्रिप्ट फ़ाइल की कैशिंग को कैसे रोकें? प्रत्येक 30 सेकंड में क्रोन चलाना shouldAutorotateToInterfaceOrientation आईओएस 6 में काम नहीं कर रहा है <Input type = "file"> का उपयोग करते समय फ़ाइल स्वरूप को सीमित करें? ListBox की पूरी चौड़ाई क्षैतिज रूप से फैलाने के लिए एक सूची बॉक्स आइटम टेम्प्लेट कैसे प्राप्त करें? क्यों "नामस्थान std का उपयोग करना" बुरा अभ्यास माना जाता है? सेवा बनाम IntentService सामग्री जोड़ने से पहले requestFeature () को बुलाया जाना चाहिए .NET का उपयोग करते हुए 2 फाईल्स की तुलना कैसे करें? एसवीएन में अभिगम नियंत्रण कैसे सेटअप करें? सी # स्टैटिक क्लास एक्सटेंशन एक्सटेंशन समर्थित क्यों नहीं हैं? .NET में क्या विशेषताएं हैं? विभिन्न डोमेन में सत्र चर को संरक्षित करना

उपयोगकर्ता को डाउनलोड करने के लिए मेमोरी में एक फ़ाइल बनाएं, सर्वर के माध्यम से नहीं

क्या कोई तरीका है मैं क्लाइंट साइड पर एक टेक्स्ट फ़ाइल बना सकता हूं और उपयोगकर्ता को सर्वर से कोई भी संपर्क किए बिना इसे डाउनलोड करने के लिए कह सकता हूं? मुझे पता है कि मैं सीधे अपनी मशीन (सुरक्षा और सभी) में नहीं लिख सकता, लेकिन क्या मैं इसे सहेजने के लिए उन्हें तैयार कर सकता हूं?

वेब के समाधान से एकत्रित समाधान "उपयोगकर्ता को डाउनलोड करने के लिए मेमोरी में एक फ़ाइल बनाएं, सर्वर के माध्यम से नहीं"

आप डेटा यूआरआई का उपयोग कर सकते हैं। ब्राउज़र का समर्थन भिन्न होता है; विकिपीडिया देखें उदाहरण:

<a href="data:application/octet-stream;charset=utf-16le;base64,//5mAG8AbwAgAGIAYQByAAoA">text file</a> 

ओक्टैट स्ट्रीम एक डाउनलोड प्रॉम्प्ट पर बल देना है। अन्यथा, यह शायद ब्राउज़र में खुल जाएगा

सीएसवी के लिए, आप इसका उपयोग कर सकते हैं:

 <a href="data:application/octet-stream,field1%2Cfield2%0Afoo%2Cbar%0Agoo%2Cgai%0A">CSV Octet</a> 

JsFiddle डेमो कोशिश करो

HTML5 तैयार ब्राउज़र के लिए सरल समाधान …

 function download(filename, text) { var element = document.createElement('a'); element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text)); element.setAttribute('download', filename); element.style.display = 'none'; document.body.appendChild(element); element.click(); document.body.removeChild(element); } 
 form * { display: block; margin: 10px; } 
 <form onsubmit="download(this['name'].value, this['text'].value)"> <input type="text" name="name" value="test.txt"> <textarea name="text"></textarea> <input type="submit" value="Download"> </form> 

उपरोक्त सभी उदाहरण क्रोम और आईई में ठीक काम करता है, लेकिन फ़ायरफ़ॉक्स में विफल रहता है। कृपया शरीर को लंगर लगाने और क्लिक के बाद इसे हटाने पर विचार करें।

 var a = window.document.createElement('a'); a.href = window.URL.createObjectURL(new Blob(['Test,Text'], {type: 'text/csv'})); a.download = 'test.csv'; // Append anchor to body. document.body.appendChild(a); a.click(); // Remove anchor from body document.body.removeChild(a); 

सभी उपरोक्त समाधान सभी ब्राउज़रों में काम नहीं करते थे। यह अंततः IE 10+, फ़ायरफ़ॉक्स और क्रोम पर काम करता है (और बिना jQuery या किसी अन्य लाइब्रेरी):

 save: function(filename, data) { var blob = new Blob([data], {type: 'text/csv'}); if(window.navigator.msSaveOrOpenBlob) { window.navigator.msSaveBlob(blob, filename); } else{ var elem = window.document.createElement('a'); elem.href = window.URL.createObjectURL(blob); elem.download = filename; document.body.appendChild(elem); elem.click(); document.body.removeChild(elem); } } 

ध्यान दें कि, आपकी स्थिति के आधार पर, आप elem को हटाने के बाद भी URL.revokeObjectURL को कॉल करना चाह सकते हैं। URL के लिए डॉक्स के अनुसार .createObjectURL :

हर बार जब आप createObjectURL () कहते हैं, तो एक नया ऑब्जेक्ट यूआरएल बनाया जाता है, भले ही आपने पहले से उसी ऑब्जेक्ट के लिए एक बनाया हो। इनमें से प्रत्येक को URL.revokeObjectURL () को कॉल करके जारी किया जाना चाहिए, जब आपको उनकी आवश्यकता नहीं रहती है। जब दस्तावेज उतारने पर ब्राउज़र स्वचालित रूप से इन्हें छोड़ देंगे; हालांकि, इष्टतम प्रदर्शन और स्मृति उपयोग के लिए, यदि आप सुरक्षित समय पर सुरक्षित रूप से उन्हें अनलोड कर सकते हैं, तो आपको ऐसा करना चाहिए।

मैं खुशी से FileSaver.js का उपयोग कर रहा हूँ इसकी संगतता बहुत अच्छी है (IE10 + और बाकी सब कुछ), और इसका उपयोग करना बहुत सरल है:

 var blob = new Blob(["some text"], { type: "text/plain;charset=utf-8;", }); saveAs(blob, "thing.txt"); 

निम्नलिखित विधि IE11 +, फ़ायरफ़ॉक्स 25+ और क्रोम 30+ में काम करती है:

 <a id="export" class="myButton" download="" href="#">export</a> <script> function createDownloadLink(anchorSelector, str, fileName){ if(window.navigator.msSaveOrOpenBlob) { var fileData = [str]; blobObject = new Blob(fileData); $(anchorSelector).click(function(){ window.navigator.msSaveOrOpenBlob(blobObject, fileName); }); } else { var url = "data:text/plain;charset=utf-8," + encodeURIComponent(str); $(anchorSelector).attr("download", fileName); $(anchorSelector).attr("href", url); } } $(function () { var str = "hi,file"; createDownloadLink("#export",str,"file.txt"); }); </script> 

इसे कार्रवाई में देखें: http://jsfiddle.net/Kg7eA/

नेविगेशन के लिए फ़ायरफ़ॉक्स और क्रोम समर्थन डेटा यूआरआइ, जो हमें डेटा यूआरआई पर नेविगेट करके फाइल बनाने की अनुमति देता है, जबकि आईई सुरक्षा उद्देश्यों के लिए इसका समर्थन नहीं करता है

दूसरी तरफ, IE में एक ब्लॉब बचाने के लिए एपीआई है, जिसका उपयोग फाइलें बनाने और डाउनलोड करने के लिए किया जा सकता है।

यह समाधान सीधे tiddlywiki (tiddlywiki.com) github रिपॉजिटरी से निकाला जाता है। मैंने लगभग सभी ब्राउज़रों में tiddlywiki का उपयोग किया है और यह एक जादू की तरह काम करता है:

 function(filename,text){ // Set up the link var link = document.createElement("a"); link.setAttribute("target","_blank"); if(Blob !== undefined) { var blob = new Blob([text], {type: "text/plain"}); link.setAttribute("href", URL.createObjectURL(blob)); } else { link.setAttribute("href","data:text/plain," + encodeURIComponent(text)); } link.setAttribute("download",filename); document.body.appendChild(link); link.click(); document.body.removeChild(link); } 

गीथुब रेपो: डाउनलोड सेवर मॉड्यूल

समाधान जो IE10 पर काम करता है: (मुझे एक सीएसवी फ़ाइल की आवश्यकता है, लेकिन यह टाइप और फ़ाइल नाम बदलकर टेक्सटाइल के लिए पर्याप्त है)

 var csvContent=data; //here we load our csv data var blob = new Blob([csvContent],{ type: "text/csv;charset=utf-8;" }); navigator.msSaveBlob(blob, "filename.csv") 

यदि आप बस स्ट्रिंग को डाउनलोड के लिए उपलब्ध करने के लिए परिवर्तित करना चाहते हैं, तो आप इसे jQuery का उपयोग करके देख सकते हैं।

 $('a.download').attr('href', 'data:application/csv;charset=utf-8,' + encodeURI(data)); 
 var element = document.createElement('a'); element.setAttribute('href', 'data:text/text;charset=utf-8,' + encodeURI(data)); element.setAttribute('download', "fileName.txt"); element.click(); 

अप्रैल 2014 तक, फाइलसिटाइम एपीआई को डब्लू 3 सी में मानकीकृत नहीं किया जा सकता है ब्लॉब के साथ समाधान को देखने वाले कोई भी सावधानी के साथ धागा होना चाहिए, मुझे लगता है।

HTML5 चट्टानों को ऊपर

FileSytem API पर W3C मेलिंग सूची

@ रिक उत्तर के आधार पर जो वास्तव में उपयोगी था

यदि आप इसे इस तरह से साझा करना चाहते हैं तो आपको स्ट्रिंग data को बन्द करना होगा:

 $('a.download').attr('href', 'data:application/csv;charset=utf-8,'+ encodeURI(data)); 

'माफ करना, मैं स्टैक ओवरफ्लो में अपनी वर्तमान कम प्रतिष्ठा के कारण @ रिक के उत्तर पर टिप्पणी नहीं कर सकता

एक संपादन सुझाव साझा और अस्वीकार कर दिया गया था।

आप केवल यूआरआई की तुलना में बेहतर काम भी कर सकते हैं – क्रोम का इस्तेमाल करते हुए आप यह भी बता सकते हैं कि फाइल नाम कैसे लेंगी, जैसा यूआरआई का उपयोग करते समय एक डाउनलोड नाम देने के बारे में इस ब्लॉग पोस्ट में बताया गया है ।

जैसा कि फाइलवेर के बारे में बताया गया है क्लाइंट साइड में फाइलों के साथ काम करने के लिए एक पैकेज तैयार है लेकिन, बड़ी फ़ाइलों से निपटना अच्छा नहीं है बड़ी फ़ाइलों से निपटने के लिए StreamSaver.js एक वैकल्पिक समाधान है (जो FileServer.js में बताया गया है):

 const fileStream = streamSaver.createWriteStream('filename.txt', size); const writer = fileStream.getWriter(); for(var i = 0; i < 100; i++){ var uint8array = new TextEncoder("utf-8").encode("Plain Text"); writer.write(uint8array); } writer.close() 

अगर फ़ाइल में टेक्स्ट डेटा होता है, तो मैं एक तकनीक का उपयोग करता हूं जो पाठ को एक टेक्स्टएरिया तत्व में डाल देता है और उपयोगकर्ता को इसे चुनें (टेतेरेआ में क्लिक करें, फिर सीटी-ए-ए), फिर एक टेक्स्ट एडिटर के पेस्ट के प्रति कॉपी करें।

यह वास्तव में संभव है – फ्लैश का उपयोग करें

आप या तो जेएस के साथ सामग्री का निर्माण कर सकते हैं और फिर कुछ फ़्लैश वार्स को प्रारंभ कर सकते हैं या सिर्फ एक फ्लैश फिल्म के भीतर सब कुछ कर सकते हैं।

कृपया कुछ महत्वपूर्ण टिप्पणियों के लिए इस पर एक नज़र डालें।