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


823

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


जवाबों:


433

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

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

ऑक्टेट-स्ट्रीम को एक डाउनलोड प्रॉम्प्ट के लिए बाध्य करना है। अन्यथा, यह संभवतः ब्राउज़र में खुल जाएगा।

CSV के लिए, आप उपयोग कर सकते हैं:

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

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


19
यह एक क्रॉस ब्राउज़र समाधान नहीं है, लेकिन निश्चित रूप से कुछ देखने लायक है। उदाहरण के लिए IE डेटा यूरी को समर्थन को सीमित करता है। IE 8 का आकार 32KB और IE 7 का आकार कम है और सभी का समर्थन नहीं करता है।
डैरिन दिमित्रोव

8
Chrome संस्करण 19.0.1084.46 में, यह विधि निम्नलिखित चेतावनी उत्पन्न करती है: "संसाधन को दस्तावेज़ के रूप में व्याख्या की गई लेकिन MIME प्रकार के पाठ / csv के साथ स्थानांतरित:" डेटा: पाठ / सीएसवी, फ़ील्ड 1% 2Cfield2% 0Afoo% 2Cbar% 0Agoo% 2Cgai% 0A "। " एक डाउनलोड ट्रिगर नहीं है
क्रिस

2
यह अब क्रोम में काम करता है (v20 और v21 के खिलाफ परीक्षण किया गया) लेकिन IE9 नहीं (जो कि सिर्फ jsFiddle हो सकता है, लेकिन किसी तरह मुझे इसमें संदेह है)।
इरकैम

5
जब तक आपके पास इसे UTF-8 में परिवर्तित करने का कोड नहीं है, तब तक सही चार्ट लगभग निश्चित रूप से UTF-16 है। जावास्क्रिप्ट आंतरिक रूप से UTF-16 का उपयोग करता है। यदि आपके पास कोई पाठ या CSV फ़ाइल है, तो स्ट्रिंग को '\ ufeff' से शुरू करें, UTF-16BE के लिए बाइट ऑर्डर मार्क, और पाठ संपादक गैर-ASCII वर्णों को सही ढंग से पढ़ पाएंगे।
लार्पर्स

14
उचित फ़ाइल नाम और विस्तार और अपने ओएस को इसके साथ क्या करना है, यह बताने के लिए बस डाउनलोड = "txt.csv" विशेषता जोड़ें।
elshnkhll

724

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>

प्रयोग

download('test.txt', 'Hello world!');

10
हां। यह ठीक वैसा ही है जैसा @MatthewFlaschen ने लगभग 3 साल पहले यहां पोस्ट किया था
जोसेफ सिल्बर

48
हां, लेकिन downloadविशेषता के साथ आप फ़ाइल का नाम निर्दिष्ट कर सकते हैं ;-)
Mat Pokj Pokorný

2
जैसा कि @earcam ने पहले ही ऊपर टिप्पणियों में बताया है ।
जोसेफ सिल्बर

4
txtयदि आप फ़ाइल नाम में एक्सटेंशन प्रदान नहीं करते हैं तो क्रोम केवल एक्सटेंशन को जोड़ता है । यदि आप ऐसा download("data.json", data)करेंगे तो उम्मीद के मुताबिक काम करेंगे।
कार्ल स्मिथ

6
इसने मेरे लिए क्रोम (73.0.3683.86), और फ़ायरफ़ॉक्स (66.0.2) में काम किया। यह IE11 (11.379.17763.0) और एज (44.17763.1.0) में काम नहीं किया ।
सैम

231

उपरोक्त सभी समाधान सभी ब्राउज़रों में काम नहीं करते थे। यहाँ 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);
    }
}

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

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


7
बहुत - बहुत धन्यवाद। मैंने यहां सूचीबद्ध सभी उदाहरणों की कोशिश की है और यह केवल किसी भी ब्राउज़र के साथ काम करता है। यह स्वीकृत उत्तर होना चाहिए।
LEM

क्रोम में, मुझे वास्तव में काम करने के लिए तत्व को शरीर में जोड़ना नहीं पड़ा।
जैकमोरिसे जुले

1
AngularJS 1.x ऐप्स के लिए, आप उरल्स की एक सरणी बना सकते हैं क्योंकि वे बनाए जाते हैं और फिर उन्हें घटक के $ onDestroy फ़ंक्शन में साफ करते हैं। यह मेरे लिए बहुत अच्छा काम कर रहा है।
Splaktar

1
Failed: network errorChrome में अन्य उत्तर दिए गए हैं । यह एक अच्छा काम करता है।
जुनिपर-

4
इसने मेरे लिए क्रोम (73.0.3683.86), फ़ायरफ़ॉक्स (66.0.2), IE11 (11.379.17763.0) और एज (44.17763.1.0) में काम किया।
सैम

185

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

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);

4
हालाँकि: IE 10 में एक खुला बग है (और मैंने अभी भी इसे 11 में देखा है) जो a.click()लाइन पर "एक्सेस से वंचित है" फेंकता है क्योंकि यह सोचता है कि ब्लॉब URL क्रॉस-ऑरिजनल है।
मैट

कुछ ब्राउज़रों में @Matt data uri क्रॉस ओरिजिन है। जहाँ तक मुझे पता है, न केवल मिस्सी में, बल्कि क्रोम में भी। आप डेटा uri के साथ जावास्क्रिप्ट को इंजेक्ट करने की कोशिश करके इसका परीक्षण कर सकते हैं। यह साइट के अन्य हिस्सों तक नहीं पहुँच पाएगा ...
inf3rno

7
"उपरोक्त सभी उदाहरण क्रोम और IE में ठीक काम करते हैं, लेकिन फ़ायरफ़ॉक्स में विफल रहते हैं।" चूँकि उत्तरों का क्रम समय के साथ बदल सकता है, यह स्पष्ट नहीं है कि आपके द्वारा यह लिखते समय कौन से उत्तर आपके ऊपर थे। क्या आप इंगित कर सकते हैं कि फ़ायरफ़ॉक्स में कौन सा दृष्टिकोण काम नहीं करता है?
केविन

120

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

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

यह क्रोम पर बहुत अच्छा काम करता है। मैं उपयोगकर्ता को डिस्क पर फ़ाइल के स्थान को विशिष्ट करने की अनुमति कैसे दूं?
'18:

6
वाह, पुस्तकालय का उपयोग करने के लिए आसान के लिए धन्यवाद। यह आसानी से सबसे अच्छा जवाब है, और जो इन दिनों HTML <5 का उपयोग करने वाले लोगों के बारे में परवाह करता है?
notbad.jpeg

@ स्पष्ट मुझे यकीन नहीं है कि आप इस प्लगइन के साथ कर सकते हैं।
डैनियल बकमास्टर

@ शब्द: आप डाउनलोड स्थान का मतलब है? यही कारण है कि FileSaver.js से संबंधित नहीं है, आप अपने ब्राउज़र विन्यास तो सेट है कि यह प्रत्येक डाउनलोड करने से पहले एक फ़ोल्डर के लिए पूछता है, या बल्कि नई उपयोग करने की आवश्यकता डाउनलोड विशेषता पर <a>
कोडमैनएक्स

1
यह ब्राउज़रों के IE 10+ परिवार के लिए एक महान समाधान है। IE अभी तक डाउनलोड किए गए HTML 5 टैग का समर्थन नहीं करता है और इस पृष्ठ पर अन्य समाधान (और उसी समस्या पर चर्चा करने वाले अन्य SO पृष्ठ) बस मेरे लिए काम नहीं कर रहे थे। FileSaver ftw!
टीएमसी

22

निम्न विधि 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 सुरक्षा उद्देश्यों के लिए इसका समर्थन नहीं करता है।

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


मैंने सिर्फ ईवेंट (ऑनक्लिक और ऑनरेड) और सेट विशेषताओं को संलग्न करने के लिए jquery का उपयोग किया, जिसे आप वेनिला JS के साथ भी कर सकते हैं। मुख्य भाग (window.navigator.msSaveOrOpenBlob) को jquery की आवश्यकता नहीं है।
दिनेश ygv

डेटा यूरि दृष्टिकोण के लिए आकार की सीमा अभी भी है, है ना?
फिल

msSaveOrOpenBlob को यहां अप्रचलित दिखाया गया है: developer.mozilla.org/en-US/docs/Web/API/Navigator/msSaveBlob
eflat

13

यह समाधान tiddlywiki's (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);
}

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


यह क्रोम पर बहुत अच्छी तरह से काम करता है, लेकिन फ़ायरफ़ॉक्स पर नहीं। यह एक फ़ाइल बनाता है और इसे डाउनलोड करता है, लेकिन फ़ाइल खाली है। कोई सामग्री नहीं है। कोई विचार क्यों? आईई पर परीक्षण नहीं किया गया ...
Narxx

2
सिवाय इसके कि समारोह का कोई नाम नहीं है, यह मेरा पसंदीदा है
योरको गोंजालेस

11

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")

1
लुडोविक के उत्तर में अन्य ब्राउज़रों के लिए यह बड़ा, प्लस समर्थन शामिल है।
डैन डस्केल्सस्कु

10

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

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


10

पैकेज js-फ़ाइल-डाउनलोड से github.com/kennethjiang/js-file-download ब्राउज़र समर्थन के लिए हैंडल बढ़त मामलों:

स्रोत देखें कि यह इस पृष्ठ पर वर्णित तकनीकों का उपयोग कैसे करता है।

स्थापना

yarn add js-file-download
npm install --save js-file-download

प्रयोग

import fileDownload from 'js-file-download'

// fileDownload(data, filename, mime)
// mime is optional

fileDownload(data, 'filename.csv', 'text/csv')

1
धन्यवाद - अभी-अभी परीक्षण किया गया - विंडोज पर फ़ायरफ़ॉक्स, क्रोम और ऐज के साथ काम करता है
ब्रायन बर्न्स

8

जैसा कि पहले उल्लेख किया गया है, क्लाइंट साइड पर फ़ाइलों के साथ काम करने के लिए filesaver एक शानदार पैकेज है। लेकिन, यह बड़ी फ़ाइलों के साथ अच्छा नहीं है। 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()

1
पाठ एनकोडर अभी बहुत प्रयोगात्मक है, मैं इसे (या पॉलीफिलिंग) से बचने का सुझाव दूंगा।
ब्रैंडन.ब्लैंडर


5

अप्रैल 2014 तक, W3C में FileSytem API को मानकीकृत नहीं किया जा सकता है। किसी को भी बूँद के साथ घोल को सावधानी से देखना चाहिए, मुझे लगता है।

एचटीएमएल 5 चट्टानें सिर के ऊपर से गुजरती हैं

FileSytem एपीआई पर W3C मेलिंग सूची


5

@Rick के उत्तर के आधार पर जो वास्तव में मददगार था।

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

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

`क्षमा करें, मैं StackOverflow में अपनी वर्तमान कम प्रतिष्ठा के कारण @ रिक के उत्तर पर टिप्पणी नहीं कर सकता।

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


1
मैं सुझाव को स्वीकार नहीं कर पा रहा था। अजीब ... मैंने कोड अपडेट किया।
रिक

4

हम URL एपीआई का उपयोग कर सकते हैं , विशेष रूप से URL.createObjectURL () , और बहुत अधिक कुछ भी एनकोड और डाउनलोड करने के लिए बूँद एपीआई।

यदि आपका डाउनलोड छोटा है, तो यह ठीक काम करता है:

document.body.innerHTML += 
`<a id="download" download="PATTERN.json" href="${URL.createObjectURL(new Blob([JSON.stringify("HELLO WORLD", null, 2)]))}"> Click me</a>`
download.click()
download.outerHTML = ""


यदि आपका डाउनलोड बहुत बड़ा है, तो DOM का उपयोग करने के बजाय, डाउनलोड पैरामीटर के साथ लिंक तत्व बनाने के लिए एक बेहतर तरीका है, और एक क्लिक ट्रिगर करें।

ध्यान दें कि लिंक तत्व दस्तावेज में संलग्न नहीं है, लेकिन फिर भी काम पर क्लिक करें! इस तरह से कई सैकड़ों मो का डाउनलोड बनाना संभव है।

const stack = {
 some: "stuffs",
 alot: "of them!"
}

BUTTONDOWNLOAD.onclick = (function(){
  let j = document.createElement("a")
  j.id = "download"
  j.download = "stack_"+Date.now()+".json"
  j.href = URL.createObjectURL(new Blob([JSON.stringify(stack, null, 2)]))
  j.click()
})  
<button id="BUTTONDOWNLOAD">DOWNLOAD!</button>


बक्शीश! किसी भी चक्रीय वस्तुओं को डाउनलोड करें , त्रुटियों से बचें:

TypeError: चक्रीय वस्तु मान (फ़ायरफ़ॉक्स) TypeError: Converting

JSON (क्रोम और ओपेरा) टाइप संरचना: परिपत्र संरचना

मूल्य तर्क में संदर्भ समर्थित नहीं है (एज)

Https://github.com/douglascrockford/JSON-js/blob/master/cycle.js का उपयोग करना

इस उदाहरण पर, documentऑब्जेक्ट को json के रूप में डाउनलोड करना ।

/* JSON.decycle */
if(typeof JSON.decycle!=="function"){JSON.decycle=function decycle(object,replacer){"use strict";var objects=new WeakMap();return(function derez(value,path){var old_path;var nu;if(replacer!==undefined){value=replacer(value)}
if(typeof value==="object"&&value!==null&&!(value instanceof Boolean)&&!(value instanceof Date)&&!(value instanceof Number)&&!(value instanceof RegExp)&&!(value instanceof String)){old_path=objects.get(value);if(old_path!==undefined){return{$ref:old_path}}
objects.set(value,path);if(Array.isArray(value)){nu=[];value.forEach(function(element,i){nu[i]=derez(element,path+"["+i+"]")})}else{nu={};Object.keys(value).forEach(function(name){nu[name]=derez(value[name],path+"["+JSON.stringify(name)+"]")})}
return nu}
return value}(object,"$"))}}


document.body.innerHTML += 
`<a id="download" download="PATTERN.json" href="${URL.createObjectURL(new Blob([JSON.stringify(JSON.decycle(document), null, 2)]))}"></a>`
download.click()


2

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



2

यह नीचे कार्य किया।

 private createDownloadableCsvFile(fileName, content) {
   let link = document.createElement("a");
   link.download = fileName;
   link.href = `data:application/octet-stream,${content}`;
   return link;
 }

क्या आप फ़ाइल को सौंपे जाने वाले फ़ाइल को एक नए टैब में खोल सकते हैं, लेकिन डाउनलोड नहीं कर रहे हैं, बस एक टैब में खोल रहे हैं?
कार्ल क्रोगर इहल

1

निम्न विधि IE10 +, एज, ओपेरा, एफएफ और क्रोम में काम करती है:

const saveDownloadedData = (fileName, data) => {
    if(~navigator.userAgent.indexOf('MSIE') || ~navigator.appVersion.indexOf('Trident/')) { /* IE9-11 */
        const blob = new Blob([data], { type: 'text/csv;charset=utf-8;' });
        navigator.msSaveBlob(blob, fileName);
    } else {
        const link = document.createElement('a')
        link.setAttribute('target', '_blank');
        if(Blob !== undefined) {
            const blob = new Blob([data], { type: 'text/plain' });
            link.setAttribute('href', URL.createObjectURL(blob));
        } else {
            link.setAttribute('href', 'data:text/plain,' + encodeURIComponent(data));
        }

        ~window.navigator.userAgent.indexOf('Edge')
            && (fileName = fileName.replace(/[&\/\\#,+$~%.'':*?<>{}]/g, '_')); /* Edge */

        link.setAttribute('download', fileName);
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
    }
}

तो, बस फ़ंक्शन को कॉल करें:

saveDownloadedData('test.txt', 'Lorem ipsum');

0

मेरे लिए यह पूरी तरह से काम करता है, एक ही फ़ाइल नाम और एक्सटेंशन डाउनलोड होने के साथ

<a href={"data:application/octet-stream;charset=utf-16le;base64," + file64 } download={title} >{title}</a>

'शीर्षक' एक्सटेंशन यानी साथ फ़ाइल का नाम है, sample.pdf, waterfall.jpg, आदि ..

'file64' कुछ इस तरह से base64 सामग्री है, Ww6IDEwNDAsIFNsaWRpbmdTY2FsZUdyb3VwOiAiR3JvdXAgQiIsIE1lZGljYWxWaXNpdEZsYXRGZWU6IDM1LCBEZW50YWxQYXltZW50UGVyY2VudGFnZTogMjUsIFByb2NlZHVyZVBlcmNlbnQ6IDcwLKCFfSB7IkdyYW5kVG90YWwiOjEwNDAsIlNsaWRpbmdTY2FsZUdyb3VwIjoiR3JvdXAgQiIsIk1lZGljYWxWaXNpdEZsYXRGZWUiOjM1LCJEZW50YWxQYXltZW50UGVyY2VudGFnZSI6MjUsIlByb2NlZHVyZVBlcmNlbnQiOjcwLCJDcmVhdGVkX0J5IjoiVGVycnkgTGVlIiwiUGF0aWVudExpc3QiOlt7IlBhdGllbnRO


0

मैं एक <a></a>टैग का उपयोग तब सेट होगा href='path'। बाद में, <a>तत्वों के बीच में एक छवि रखें ताकि मुझे इसे देखने के लिए एक दृश्य मिल सके। यदि आप चाहते हैं, तो आप एक ऐसा फंक्शन बना सकते हैं hrefजिससे यह बदल जाएगा कि यह केवल एक ही लिंक नहीं होगा बल्कि गतिशील होगा।

दे दो <a>टैग एक idके रूप में अच्छी तरह से आप जावास्क्रिप्ट के साथ इसे का उपयोग करना चाहते हैं।

HTML संस्करण के साथ शुरू:

<a href="mp3/tupac_shakur-how-do-you-want-it.mp3" download id="mp3Anchor">
     <img src="some image that you want" alt="some description" width="100px" height="100px" />
</a>

अब जावास्क्रिप्ट के साथ:

*Create a small json file*;

const array = [
     "mp3/tupac_shakur-how-do-you-want-it.mp3",
     "mp3/spice_one-born-to-die.mp3",
     "mp3/captain_planet_theme_song.mp3",
     "mp3/tenchu-intro.mp3",
     "mp3/resident_evil_nemesis-intro-theme.mp3"
];

//load this function on window
window.addEventListener("load", downloadList);

//now create a function that will change the content of the href with every click
function downloadList() {
     var changeHref=document.getElementById("mp3Anchor");

     var j = -1;

     changeHref.addEventListener("click", ()=> {

           if(j < array.length-1) {
               j +=1;
               changeHref.href=""+array[j];
          }
           else {
               alert("No more content to download");
          }
}

-22

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


30
मैंने उस पर विचार किया था, लेकिन उपयोगकर्ता-मित्रता बिंदु से, यह विनाशकारी है। साथ ही, फ़ाइल को CSV एक्सटेंशन के साथ सहेजना होगा। अपने उपयोगकर्ताओं को यह बताने का प्रयास करें।
जोसेफ सिलबर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.