Тег HTML5 `<a>` может использовать атрибут `download`, чтобы задать загрузку ресурса, но он должен быть из того же источника. Если браузер может его разобрать, он откроет его напрямую.
В этом случае мы можем использовать стороннюю библиотеку download для реализации более полной функциональности загрузки.
Ресурсы, связанные с download.js:
- Адрес GitHub:https://github.com/rndme/download
- Библиотека на CDN:https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/downloadjs/1.4.8/download.min.js
- Установка через NPM:npm install downloadjs
Библиотека 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();