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);
            });
        },
相关推荐
2601_9628857213 分钟前
quotes 字段全解:涨跌幅、振幅、换手率的口径与单位
java·前端·spring
excel35 分钟前
encodeURI 和 encodeURIComponent 有什么区别?
前端
前端精髓38 分钟前
调用openrouter的免费API模型
java·前端·javascript
赛博守夜人1 小时前
AI安全攻防与治理之十四:AI 安全测试不能脱离传统安全,Web、API、移动端与模型攻击面的组合拳
前端·人工智能·安全
开开心心_Every1 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
networknomad2 小时前
OpenReplay:自己搭的会话回放工具,给前端排错用的
前端·其他
缓慢更新2 小时前
AI 辅助生成单测:从接口定义到用例的流水线
java·服务器·前端·网络·数据库·人工智能
陈随易3 小时前
AI 运维服务器,安全又可靠的方法
前端·后端·程序员
风骏时光牛马4 小时前
AI稳定性治理体系构建与疑难问题深度分析
前端
IT_陈寒4 小时前
JavaScript的this坑人实录,这次我真的记下来了
前端·人工智能·后端