最後活躍 1729153378

使用Blob下载:图片、pdf 等默认被浏览器新标签页预览的文件

修訂 46f22e416bd52b2b9eb5636f407ee2d180d6fd64

blobdownload.js 原始檔案
1import axios from "axios";
2
3/**
4 * 使用Blob下载图片、pdf等可被浏览器预览的文件格式
5 * @param fileUrl 文件链接
6 * @param fileSaveName 文件保存名称
7 */
8function downFile(fileUrl, fileSaveName) {
9 console.log("下载", fileUrl);
10
11 // 发送GET请求,将响应类型设置为blob
12 axios
13 .get(fileUrl, {
14 responseType: "blob" // 重要,这告诉axios返回的数据类型为Blob
15 })
16 .then(response => {
17 // response.data 是一个Blob对象,包含了文件的二进制数据
18 console.log("response", response);
19 const blob = response.data;
20
21 // 如果你需要使用这个Blob对象,比如将其转换为URL,可以这样做:
22 const fileBlobUrl = window.URL.createObjectURL(blob);
23 console.log(fileBlobUrl);
24 downloadImage(fileBlobUrl, fileSaveName);
25 // 这里你可以使用imageUrl,例如设置为img标签的src属性来显示图片
26 })
27 .catch(error => {
28 // 处理错误情况
29 console.error("转换图片URL到Blob时出错:", error);
30 });
31}
32
33function downloadImage(blobUrl, saveName) {
34 // 创建一个<a>元素
35 var link = document.createElement("a");
36 link.href = blobUrl;
37 // 重要:链接有 download 属性,浏览器才会触发保存文件的动作,否则还是新标签页打开预览
38 link.download = saveName; // 指定下载的文件名
39
40 // 将<a>元素添加到DOM中(不显示)
41 document.body.appendChild(link);
42
43 // 触发点击事件
44 link.click();
45
46 // 移除<a>元素
47 document.body.removeChild(link);
48}
49