# axios 获取文件 blob 实现下载及预览
# 1. 介绍
通过 axios 获取文件 Blob,实现预览与下载。
此方式与传统的 浏览器打开 URL(如 https://abc.com/1.png
) 的方式不同
# 获取 Blob
GET:
const params = { fileId: '123' };
const blob: Blob = await axios.get(url, { params, responseType: 'blob' });
POST:
const data = { fileId: '123' };
const blob: Blob = await axios.post(url, data, { responseType: 'blob' });
# 下载及预览
import mime from 'mime';
class DownloadUtil {
downloadFile(blob: Blob, fileName: string) {
// 注意: 这里要把返回的二进制数据用 File 对象包裹起来
const file = new window.File([blob], fileName);
const href = window.URL.createObjectURL(file);
const anchorElement = document.createElement('a');
anchorElement.href = href;
anchorElement.download = fileName;
document.body.appendChild(anchorElement);
anchorElement.click();
document.body.removeChild(anchorElement);
window.URL.revokeObjectURL(href);
}
// 预览(如果浏览器不能解析,则主动下载)
previewFile(blob: Blob, fileName: string) {
// 获取文件的 MIME 类型
const mimeType = mime.getType(fileName) || undefined;
const previewUrl = window.URL.createObjectURL(new Blob([blob], { type: mimeType }));
window.open(previewUrl, '_blank');
URL.revokeObjectURL(previewUrl); // 释放内存
}
}
# 3. 参考
上一篇: 下一篇:
本章目录