Тег HTML5 `<a>` может использовать атрибут `download`, чтобы задать загрузку ресурса, но он должен быть из того же источника. Если браузер может его разобрать, он откроет его напрямую.

В этом случае мы можем использовать стороннюю библиотеку download для реализации более полной функциональности загрузки.

Ресурсы, связанные с download.js:

Библиотека download.js предоставляет функцию `download()` для скачивания файлов.

Содержимым для скачивания может быть URL, строка, Blob или типизированный массив данных, либо dataURL, который представляет данные файла в виде строки в кодировке base64 или URL.

Независимо от входного формата, `download()` использует указанное имя файла и информацию MIME для сохранения файла так же, как это делает сервер с помощью HTTP-заголовка Content-Disposition.

download(data, strFileName, strMimeType);
  • data — содержимое данных для скачивания; может быть Blob, File, String или dataURL.
  • strFileName — имя создаваемого файла.
  • strMimeType — MIME-тип содержимого скачиваемого файла.

Примеры

Текст

Сохраните строку в файл dlText.txt и скачайте его:

download("hello world", "dlText.txt", "text/plain");

Пример текста в dataURL:

download("data:text/plain,hello%20world", "dlDataUrlText.txt", "text/plain");

Пример текста в blob:

download(new Blob(["hello world"]), "dlTextBlob.txt", "text/plain");

Пример с url:

download("/robots.txt");

Пример текста в виде массива UInt8:

var str= "hello world",    arr= new Uint8Array(str.length);
str.split("").forEach(function(a,b){
  arr[b]=a.charCodeAt();
});

download( arr, "textUInt8Array.txt", "text/plain" );

HTML

Пример строки html:
download(document.documentElement.outerHTML, "dlHTML.html", "text/html");

Пример Blob с html:

download(new Blob(["hello world".bold()]), "dlHtmlBlob.html", "text/html");

Пример с callback в ajax:

$.ajax({
        url: "/download.html",
        success: download.bind(true, "text/html", "dlAjaxCallback.html")
});

Бинарные файлы

URL изображения:

download("/diff6.png");

Асинхронно скачать изображение:

var x=new XMLHttpRequest();
x.open( "GET", "/diff6.png" , true);
x.responseType="blob";
x.onload= function(e){download(e.target.response, "awesomesauce.png", "image/png");};
x.send();