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

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

使用 axios 下载文件

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

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

    javascript 复制代码
    <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

javascript 复制代码
// 后端接口导出 非同源的资源需要下载,可以将其转换为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标签下载

javascript 复制代码
  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 中实现文件下载功能。

相关推荐
qq_2780637119 分钟前
vue2 结合后端预览pdf 跨域的话就得需要后端来返回 然后前端呈现
前端·pdf
桥豆麻袋939321 分钟前
vite 初始化react项目
前端·react.js·前端框架
2401_8370885022 分钟前
CSS相对定位与绝对定位
前端·css
梦想平凡1 小时前
开元类双端互动组件部署实战全流程教程(第1部分:环境与搭建)
运维·服务器·前端·游戏·node.js
HelloRevit1 小时前
React -> AI组件 -> 调用Ollama模型, qwen3:1.7B非常聪明
前端·react.js·前端框架
geovindu1 小时前
javascript: Multi-page PDF in Canvas using PDFJS 5.1
前端·javascript
暮 夏1 小时前
利用session在html和MySQL实现登录
前端·mysql·html
吃面必吃蒜2 小时前
前端实战中的单例模式:以医疗药敏管理为例
前端·javascript·单例模式·设计模式
陈奕昆2 小时前
二、【LLaMA-Factory实战】数据工程全流程:从格式规范到高质量数据集构建
前端·人工智能·python·llama·大模型微调
迷茫运维路2 小时前
《企业级前端部署方案:Jenkins+MinIO+SSH+Gitee+Jenkinsfile自动化实践》
运维·前端·gitee·自动化·ssh·jenkins