Vue中下载或打开文件的JavaScript方法

1、根据url下载,可以打开图片、pdf,其他直接下载,不打开新标签页

javascript 复制代码
downloadFile (data, url, name, mimeType) {
            // 允许直接在浏览器打开的后缀
            const openExts = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp', '.pdf',];
            const ext = name ? name.slice(name.lastIndexOf('.')).toLowerCase() : '';
            const a = document.createElement('a');
            a.href = getFileUrl(url);
            if (openExts.includes(ext)) {
                // 图片 / PDF:新标签页打开
                a.target = '_blank';
                a.rel = 'noopener noreferrer';
            } else {
                // 其他文件:触发下载
                a.download = name || '';
            }

            document.body.appendChild(a);
            a.click();
            document.body.removeChild(a);
        },

2、根据url下载,浏览器自行判断是打开还是下载,默认打开新标签页,会自动关闭

javascript 复制代码
downloadFile3 (data) {
            //该方法有可能在浏览器直接打开文件
            const a = document.createElement('a');
            a.href = data.sourceDocumentUrl;
            a.target = '_blank';
            a.download = data.sourceDocumentName || '';
            document.body.appendChild(a);
            a.click();
            document.body.removeChild(a);
        },

3、根据url下载,直接下载,不打开标签页

javascript 复制代码
 downloadFile2 (data, url, name) {
            //通过JavaScript来实现下载,创建Blob对象的方式,可以绕过浏览器默认打开PDF文件的行为,强制进行下载
            return request({
                url: getFileUrl(url),
                method: "get",
                responseType: "blob",
            }).then((res) => {
                const blob = res;
                const a = document.createElement("a");
                const url = window.URL.createObjectURL(blob);
                a.href = url;
                a.download = name || "下载文件";
                a.click();
                window.URL.revokeObjectURL(url);
            });
        },
相关推荐
用户298698530141 小时前
在 React 中用 JavaScript 将 Word 转换为文本
前端·javascript·react.js
计算机魔术师1 小时前
马斯克称 Grok 4.7 使 xAI 在智能体编码领域位列第三
前端
摸鱼仙人~2 小时前
前端秋招异步手写题系统刷题路线:从 Promise 到 Pipeline、LazyMan 与并发控制
前端
秋天的一阵风2 小时前
⚡上线 24 小时,13% 的付费团队连夜换到 Jev:它到底什么来头?
前端·人工智能·ai编程
程序员若风2 小时前
CSRF攻击原理介绍和利用-腾讯云开发者社区
前端·网络·安全·web安全·网络安全·csrf攻击·腾讯云开发者社区
风尘小子2 小时前
node.js系列:process配置
前端·node.js
恋猫de小郭2 小时前
AndroidX 新增 Security State ,支持可编程的系统安全状态查询
android·前端·flutter
IT_陈寒3 小时前
Redis大key删除引发的服务雪崩,这次我真记住了
前端·人工智能·后端
李少兄3 小时前
深入解析 JavaScript 中的 `document` 对象
javascript