Единственный способ, о котором я знаю, - это трюк, используемый FileSaver.js :
- Создайте скрытый
<a>
тег.
- Установите для его
href
атрибута URL-адрес большого двоичного объекта.
- Установите его
download
атрибут на имя файла.
- Щелкните по
<a>
тегу.
Вот упрощенный пример ( jsfiddle ):
var saveData = (function () {
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
return function (data, fileName) {
var json = JSON.stringify(data),
blob = new Blob([json], {type: "octet/stream"}),
url = window.URL.createObjectURL(blob);
a.href = url;
a.download = fileName;
a.click();
window.URL.revokeObjectURL(url);
};
}());
var data = { x: 42, s: "hello, world", d: new Date() },
fileName = "my-download.json";
saveData(data, fileName);
Я написал этот пример, чтобы проиллюстрировать идею, вместо этого в производственном коде используйте FileSaver.js.
Примечания
- Старые браузеры не поддерживают атрибут «загрузка», поскольку он является частью HTML5.
- Некоторые форматы файлов считаются браузером небезопасными, и загрузка не выполняется. У меня работает сохранение файлов JSON с расширением txt.