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);
            });
        },
相关推荐
暗夜行者之光3 小时前
LangGraph + MCP 实战:构建"自然语言查数据"的 ChatBI Agent
前端·后端
一tiao咸鱼3 小时前
还在手动海投?我做了个 AI 求职助手,自动筛选 BOSS 职位再精准投递
前端·后端·面试
尤水就下3 小时前
🔥预热:在线文档的 block 架构是如何实现的(未完待续...)
前端·javascript·架构
全栈项目管理程序猿3 小时前
ArcGIS JS 基础教程(29):CSVLayer 表格点位图层
前端·javascript
骑着蜗牛撵大象3274 小时前
豆包 Seed 驱动的记账智能体:从拍票抽取到月报生成的全链路落地记录
java·前端·javascript·结构化输出·豆包seed·多模态识别·记账系统
溪语流沙4 小时前
【Web全栈进阶】前端世界观:现代工具链与框架为什么存在
前端·javascript·vue.js
kyriewen4 小时前
我逐个测了 JSON.stringify 的 7 个坑:第 1 个就在丢数据
前端·javascript·程序员
积流成海5 小时前
用代码实现哈希计算器:Web Crypto API 实战
前端·算法·哈希算法·哈希函数·盘子工具站
data analyse 4565 小时前
服务端访问日志聚合 PV 与 UV 怎么实现?日志采集与口径设计
大数据·前端·数据分析
song5015 小时前
React Native for OpenHarmony 实战:三方库 react-native-ratings 的鸿蒙化适配指南
javascript·react native·react.js·分类·harmonyos