2011-06-24 21 views
8

का बल डाउनलोड मैं सोच रहा था कि data:text/plain यूआरएल डाउनलोड करने के लिए ब्राउज़र (कम से कम क्रोम) को मजबूर करना संभव है या नहीं।'डेटा: टेक्स्ट/सादा' यूआरएल

क्रोम बाइनरी यूआरएल डाउनलोड करता है (उदा। data:application/zip;base64,...), लेकिन यह उन फ़ाइलों को डाउनलोड नहीं करता है जिन्हें ब्राउज़र के अंदर देखा जा सकता है (जैसे टेक्स्ट फाइलें)।

data:text/plain;content-disposition=attachment;filename=test.txt;... 

लेकिन जैसे मैं इस तरह हेडर नहीं जोड़ सकते हैं ऐसा लगता है:

क्या मैं पहले से ही कोई भाग्य के साथ की कोशिश की अब तक यह है।

क्रोम को data:text/plain,... यूआरएल डाउनलोड करने का कोई तरीका है?

उत्तर

12

अभी तक, क्रोम में <a download> का उपयोग करना संभव हो गया है। dispatchEvent का उपयोग करके, आप जब चाहें फ़ाइल के रूप में किसी भी स्ट्रिंग को फ़ाइल (यहां तक ​​कि एक कस्टम फ़ाइल नाम के साथ) डाउनलोड कर सकते हैं। यहाँ यह उपयोग करने के लिए एक उपयोगिता समारोह है:

var downloadFile = function(filename, content) { 
    var blob = new Blob([content]); 
    var evt = document.createEvent("HTMLEvents"); 
    evt.initEvent("click"); 
    $("<a>", { 
    download: filename, 
    href: webkitURL.createObjectURL(blob) 
    }).get(0).dispatchEvent(evt); 
}; 

उपयोग:

downloadFile("foo.txt", "bar"); 

यह jQuery और webkit उपसर्ग का उपयोग करता है, लेकिन दोनों से बचा जा सकता है।

1

क्या मैं एक सर्वर है, जो उन्हें निम्न HTTP हेडर के साथ वापस भेजता है को डाटा भेजने रहा था:

Content-disposition: attachment;filename=test.txt 

मुझे यह पसंद नहीं है, लेकिन यह नहीं बल्कि अच्छी तरह से काम करता है।

6
Try this: 
<a download="file_downloaded_via_data_URL.txt" 
href="data:text/plain;base64,SGVsbG8sIHdvcmxkISBJJ20gZG93bmxvYWRlZCB2aWEgImRhdGE6dGV4dC9wbGFpbjsuLi4iIFVSTCB1c2luZyA8YSBkb3dubG9hZD0iZmlsZV9uYW1lIi4uLj4uDQpNeSBiaXJ0aHBsYWNlOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzY0Njg1MTcvDQoNCk1vcmUgYWJvdXQ6DQpodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sL2xpbmtzLmh0bWwjYXR0ci1oeXBlcmxpbmstZG93bmxvYWQNCmh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWwvbGlua3MuaHRtbCNkb3dubG9hZGluZy1yZXNvdXJjZXMNCg0KQnJvd3NlciBzdXBwb3J0OiBodHRwOi8vY2FuaXVzZS5jb20vZG93bmxvYWQ="> 
    Download text file 
</a> 

यह HTML5 विशेषता download="filename.ext" का उपयोग करता है। (कोई जेएस जरूरत :)

के बारे में अधिक: ( http://www.w3.org/TR/html/links.html#downloading-resources

ब्राउज़र समर्थन http://caniuse.com/download

पर जाँच की जा सकती अब के लिए के रूप में, 2013, कोई आईई और न ही सफारी समर्थन)

मुझे लगता है, आप गैर-समर्थित ब्राउज़र के लिए फ़ॉलबैक कर सकते हैं: अपनी सर्वर स्क्रिप्ट के URL पर href="..." के मान को बदलने के लिए जेएस का उपयोग करें (जो उचित HTTP शीर्षलेख Content-disposition: attachment;filename=filename.txt के साथ फ़ाइल सामग्री वापस कर देगा)।

+0

यह बहुत ही बढ़िया है, कुछ नया ब्राउज़र 2017 में अभी डेटा यूआरएल पर नेविगेट करने का समर्थन नहीं करता है – code4j

0

यह नरक के रूप में काम करता है ...

<div class="tags-style-one dragme" draggable="true" data-transfer="33343">some value is 33343</div> 

    <script type="text/javascript"> 
    (function ($) { 
     $(document).ready(function() { 
     $('.dragme').on("dragstart",function(evt) { 
      evt.originalEvent 
        .dataTransfer 
        .setData(
          "text/plain", 
          $(this).data('transfer').toString() 
        ); 
     }); 
    })(jQuery); 
</script>