Search code examples
filetextdownloadcontent-dispositiondata-url

Force download of 'data:text/plain' URL


I was wondering whether it is possible to force a browser (at least Chrome) to download a data:text/plain URL.

Chrome does download binary URLs (e.g. data:application/zip;base64,...), but it does not download files that can be viewed inside the browser (such as text files).

What I already tried with no luck so far is this:

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

But it seems like I cannot add headers like this.

Is there any way to make Chrome download a data:text/plain,... URL?


Solution

  • As of now, it has been made possible to use <a download> in Chrome. Using dispatchEvent, you can download any string as file (even with a custom filename) whenever you want. Here's a utility function to use it:

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

    Usage:

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

    It uses jQuery and the webkit prefix, but both can be avoided.