当前位置: 首页 > news >正文

vue3 下载文件方式(包括通过url下载文件并修改文件名称,和文件流下载方式)

目录

    • 一、通过url下载文件并修改文件名称
        • 1.封装downloadFile.ts
        • 2.引入
    • 二、文件流下载方式
        • 1.封装downloadFile.ts
        • 2.引入

一、通过url下载文件并修改文件名称

1.封装downloadFile.ts
/** 下载文件* @param url 下载地址* @param fileName 下载后的文件名* 备注:下载的文件地址要和当前网站域名保持一直,不然会报错*/
export const downloadInvoke = (url: string, fileName: string) => {getBlob(url).then((blob) => {saveAs(blob, fileName);});
}export const getBlob = (url: string) => {return new Promise((resolve) => {const xhr = new XMLHttpRequest();xhr.open("GET", url, true);xhr.responseType = "blob";xhr.onload = () => {if (xhr.status === 200) {resolve(xhr.response);}};xhr.send();});
};export const saveAs = (blob: any, filename: string) => {if (window.navigator.msSaveOrOpenBlob) {navigator.msSaveBlob(blob, filename); //允许用户在客户端上保存文件} else {const link = document.createElement("a");const body = document.querySelector("body");link.href = window.URL.createObjectURL(blob);link.download = filename;link.style.display = "none";body.appendChild(link);link.click();body.removeChild(link);window.URL.revokeObjectURL(link.href);}
};
2.引入
import { downloadInvoke } from "@/utils/index";downloadInvoke(url, "文件名")

二、文件流下载方式

1.封装downloadFile.ts
// 文件流下载
// 下载文件的接口 fileName = 'xxxx.xls'
/** 文件流 下载文件* @param res 文件流* @param fileName 下载后的文件名* 备注:接口里面记得添加 responseType: "blob"*/
export const downData = (res: any, fileName: string) => {if (!res) {return}// 无法导出时,报错的问题的处理if (res.type == "application/json") {const reader = new FileReader();reader.readAsText(res, "utf-8");reader.onload = function () {const msg = JSON.parse(reader.result as string);ElMessage.error(msg);}return}let url = window.URL.createObjectURL(new Blob([res]))let link = document.createElement('a')link.style.display = 'none'link.href = urllink.setAttribute('download', fileName)document.body.appendChild(link)link.click()document.body.removeChild(link)window.URL.revokeObjectURL(url)
}
2.引入
import { downData } from "@/utils/index";downData(res, "文件名.xls")
http://www.dtcms.com/a/391897.html

相关文章:

  • 如何高效筛选海量文献,避免浪费时间?
  • heyday
  • Go语言结构体初始化全面指南与最佳实践
  • 神经网络学习笔记15——高效卷积神经网络架构GhostNet
  • Mysql的Exists条件子查询
  • 电脑系统windows10怎么合盘
  • 一文详解Stata回归分析
  • GPS 定位:连接时空的数字导航革命
  • Rust 特有关键字及用法
  • 关于C++游戏开发入门:如何从零开始实现一个完整的游戏项目!
  • OpenRank结合游戏及算法技术原理
  • 协方差矩阵、皮尔逊相关系数
  • Redis 三大架构模式详解:主从复制、哨兵、Cluster 搭建全指南
  • [x-cmd] 如何安全卸载 x-cmd
  • 整体设计 语言拼凑/逻辑拆解/词典缝合 之 3 词典缝合(“他”):显露词典编纂行列式项的 “自然”三“然”:自然本然/ 自然而然/自然实然
  • linux配置ssh,亲测简单可用
  • SNMP 模块化设计解析
  • 2025的Xmind自定义安装(实测版)
  • AI“闻香识酒”:电子鼻+机器学习开启气味数字化新纪元
  • Coze工作流拆解:成语故事类小红书图文批量创作全流程
  • PyQt6之进度条
  • 【AI编程】Trae配置rules与配置和使用一些目前比较好用的MCP
  • 音乐家不会被束缚,MusicGPT+cpolar让创作更自由
  • python笔记之面向对象篇(六)
  • Linux中处理nohup日志太大的问题
  • vLLM应该怎么学习
  • 实测AI Ping,一个大模型服务选型的实用工具——技术原理与核心技巧解析
  • rag-anything —— 一站式 RAG 系统
  • 第十周文件包含漏洞和远程命令执⾏漏洞
  • 2021年下半年 系统架构设计师 综合知识