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

vue3 下载文件 responseType-blob 或者 a标签

在 Vue 3 中,你可以使用 axiosfetch 来下载文件,并将 responseType 设置为 blob 以处理二进制数据。以下是一个使用 axios 的示例:

使用 axios 下载文件

  1. 首先,确保你已经安装了 axios

    npm install axios
    
  2. 然后在你的 Vue 组件中使用 axios 下载文件:

    <template><button @click="onDownloadClick">下载文件</button>
    </template><script>
    import { handleFileExport } from '@/utils/exportExcel';
    import { apiGetDownload } from '@/api/encouragementApi';export default {methods: {function onDownloadClick(row: any) {const response = await axios.get('https://example.com/path/to/file', {responseType: 'blob', // 重要:设置响应类型为 blob});.handleFileExport(response )setTimeout(() => {ElMessage.success("下载成功")}, 1000)}},
    };
    </script>
    

在utils/exportExcel.ts

// 后端接口导出 非同源的资源需要下载,可以将其转换为Blob:Url
const handleFileExport = (res:any) => {
if(res.request.responseType==='blob'){let contentDisposition = res.headers['content-disposition']if (!contentDisposition) {contentDisposition = `;filename=${decodeURI(res.headers.filename)}`;}const fileName = window.decodeURI(contentDisposition.split(`filename=`)[1]);const blob = new Blob([res.data], {type: 'text/xlsx',});let downloadUrl = window.URL.createObjectURL(blob);let a = document.createElement('a');a.style.display = 'none';a.href = downloadUrl;a.download = fileName;let event = new MouseEvent('click');a.dispatchEvent(event);
}
};

使用a标签下载

  const url = apiDownloadImportFileStr({encourageTypeId: 1})const link = document.createElement('a')link.href = urllink.click()

关键点

  • responseType: 'blob':这是告诉 axiosfetch 返回一个 Blob 对象,用于处理二进制数据。
  • window.URL.createObjectURL:创建一个临时的 URL,用于下载文件。

注意事项

  • 确保服务器支持跨域请求(CORS),否则可能会遇到跨域问题。
  • 如果文件较大,可能需要考虑分块下载或显示下载进度。

通过这些步骤,你可以在 Vue 3 中实现文件下载功能。

http://www.lryc.cn/news/542528.html

相关文章:

  • 【Gin-Web】Bluebell社区项目梳理6:限流策略-漏桶与令牌桶
  • 51单片机-AT24CXX存储器工作原理
  • 突破性能极限:DeepSeek开源FlashMLA解码内核技术解析
  • 点击修改按钮图片显示有问题
  • [AI]从零开始的树莓派运行DeepSeek模型教程
  • 2024-2025 学年广东省职业院校技能大赛 “信息安全管理与评估”赛项 技能测试试卷(二)
  • Open WebUI本地部署教程
  • Missing required prop: “maxlength“
  • dify本地部署
  • python学习一
  • git branch
  • 算法-图-数据结构(邻接矩阵)-BFS广度优先遍历
  • 数学建模之数学模型—2:非线性规划
  • unity学习51:所有UI的父物体:canvas画布
  • ctfshow做题笔记—栈溢出—pwn57~pwn60
  • 数据结构 1-2 线性表的链式存储-链表
  • ArcGIS Pro进行坡度与坡向分析
  • My first Android application
  • ZLMediaKi集群设置
  • Docker基础实践与应用举例
  • Innovus中快速获取timing path逻辑深度的golden脚本
  • 百度AI图片助手,免费AI去水印、画质修复、画面延展以及局部替换
  • 【前端】Axios AJAX Fetch
  • 测试面试题:以一个登录窗口为例,设计一下登录界面测试的思路和方法
  • Android之图片保存相册及分享图片
  • EX_25/2/24
  • ElasticSearch公共方法封装
  • JVM之JVM的组成
  • 贪心算法
  • Linux下安装中文输入法总结