1. Объект блоба
Объект BLOB представляет объект файла класса, который однозначно, необработанные данные. Большие двоичные объекты не обязательно представляют данные в собственном формате JavaScript. Интерфейс файла основан на BLOB, наследует функцию BLOB и расширяет его для поддержки файлов в пользовательской системе.
Конструктор
var aBlob = new Blob( array, options );
- array — это массив объектов, таких как ArrayBuffer (буфер двоичных данных), ArrayBufferView (представление буфера двоичных данных в виде массива), Blob, DOMString и т. д., или смесь других подобных объектов, которые будут помещены в Blob. DOMStrings будут закодированы как UTF-8.
- options является необязательным, он может указывать следующие два свойства:
- type, значением по умолчанию является "", которое представляет тип MIME содержимого массива, которое будет помещено в большой двоичный объект.
- окончания, которые по умолчанию являются «прозрачными», используются для указания того, как записываются строки, содержащие окончания строк \n. Это одно из двух значений: «собственный», что означает, что разделитель строки будет изменен на символ новой строки, подходящий для файловой системы основной операционной системы, или «прозрачный», что означает, что разделитель, хранящийся в большом двоичном объекте, останется неизменным.
Пример
var debug = {hello: "world"};
var blob = new Blob([JSON.stringify(debug, null, 2)],
{type : 'application/json'});
Во-вторых, объект URL
Укажите ссылку для скачивания файла, создав объект URL.
Конструктор
Создает новый URL-адрес, представляющий указанный объект File или объект Blob.
objectURL = window.URL.createObjectURL(blob);
window.URL.revokeObjectURL()
при каждом звонкеcreateObjectURL
создается новый объект URL, даже если вы уже создали его с тем же объектом в качестве параметра. Когда эти объекты URL больше не нужны, каждый объект должен бытьURL.revokeObjectURL
метод освобождения. Браузер автоматически освобождает их при выходе из документа, но для оптимальной производительности и использования памяти вы должны активно освобождать их, когда это безопасно.
window.URL.revokeObjectURL(objectURL);
3. Используйте<a>
Загрузка тега
генерировать<a>
Этикетка.
const link = document.createElement('a');
Атрибут href указывает ссылку для скачивания
link.href = window.URL.createObjectURL(blob);
Атрибут загрузки указывает имя файла
Атрибут загрузки указывает цель гиперссылки для загрузки. существует<a>
Атрибут href должен быть установлен в теге. Этому свойству также можно присвоить значение, указывающее имя загруженного файла. Допустимые значения не ограничены, браузер автоматически определит правильное расширение файла и добавит его к файлу (.img, .pdf, .txt, .html и т. д.).
link.download = fileName;
Событие click() запускает загрузку
link.click();
4. Создайте и скачайте
Выберите подходящий тип MIME и установите кодировку.
const foo = {hello: "world"};
const blob = new Blob([JSON.stringify(foo)], type: 'application/vnd.ms-excel;charset=utf-8');
const fileName = `${new Date().valueOf()}.xls`;
const link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = fileName;
link.click();
window.URL.revokeObjectURL(link.href);
Примечание: Чтобы скачать файл с указанным расширением, вам нужно только сравнитьСправочное руководство по MIMEПросто установите тип.
5, совместимый IE
В IE для использованияwindow.navigator.msSaveOrOpenBlob
для обработки объектов Blob.
window.navigator.msSaveOrOpenBlob(blob, fileName);
Шесть, Написание обещаний
Основано на написании аксиом.
axios.get(`url`, {
responseType: 'arraybuffer',
}).then(res => {
if (res.status == 200) {
let blob = new Blob([res.data], {
type: 'application/vnd.ms-excel;charset=utf-8'
});
let fileName = `yourfile.xls`;
// for IE
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(blob, fileName);
} else {
// for Non-IE
let objectUrl = URL.createObjectURL(blob);
let link = document.createElement("a");
link.href = objectUrl;
link.setAttribute("download", fileName);
document.body.appendChild(link);
link.click();
window.URL.revokeObjectURL(link.href);
}
} else {
// error handler
}
});