当前位置: 首页 > 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 = url
  link.click()

关键点

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

注意事项

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

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

相关文章:

  • java练习(39)
  • 【C语言基础】基本数据类型和常量介绍
  • MinIO Go 客户端 API
  • DSP芯片C6678的SRIO及其中断跳转的配置
  • 【Java】I/O 流篇 —— 字节 I/O 流
  • Starlink卫星动力学系统仿真建模第九讲-滑模(SMC)控制算法原理简介及卫星控制应用
  • 深入理解Self-Attention - 原理与等价表示
  • 15.1 智能销售顾问系统架构与业务价值解析:AI 如何重塑销售流程
  • RTOS系统ulTaskNotifyTake怎么知道哪个发送任务通知函数的pxcurrentTCB
  • 4.WebSocket 配置与Nginx 的完美结合
  • react路由总结
  • IDEA搭建SpringBoot,MyBatis,Mysql工程项目
  • 学习threejs,使用createMultiMaterialObject创建多材质对象
  • 小视频压缩实用方法大汇总
  • 6.2 - UART串口数据发送之轮询
  • python-leetcode 42.验证二叉搜索树
  • 嵌入式学习|C语言篇进程间通信(IPC)全面解析与示例
  • 地铁站内导航系统:基于蓝牙Beacon与AR技术的动态路径规划技术深度剖析
  • 【OMCI实践】ONT上线过程的omci消息(五)
  • 23种设计模式的cpp举例
  • 怎么seo关键词优化排名/知乎关键词排名优化工具
  • 网站流量超了/优化网站最好的刷排名软件
  • 合肥网站制作联系方式/网络营销考试答案
  • WordPress全站转webp/seo外包优化网站
  • 灵山网站建设/营销策划书
  • 建设部网站监管平台/百度网站搜索排名