vue项目,通过axios请求下载pdf文件

此篇博客介绍了如何使用Axios发送POST请求到 '/jishi/jishi.daochu',通过设置 responseType 为 'blob' 获取PDF响应,然后创建Blob对象并转化为可下载链接,最后触发下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 axios({
          method: "post",//请求方式
          url: '/jishi/jishi.daochu',
          responseType: 'blob',
          data: data //需要传的字段
        }).then((res) => {
          let blob = new Blob([res.data], {
            type: `application/pdf` //word文档为msword,pdf文档为pdf
          });
          let objectUrl = URL.createObjectURL(blob);
          let link = document.createElement("a");
          let fname = `信息表pdf`; //下载文件的名字
          link.href = objectUrl;
          link.setAttribute("download", fname);
          document.body.appendChild(link);
          link.click();
        })

### 如何使用 VueAxios 实现文件下载功能 在前端开发中,实现文件下载通常涉及发送 HTTP 请求并处理响应中的二进制数据流。以下是基于 VueAxios文件下载解决方案。 #### 1. 安装 Axios 首先需要确保项目中有 Axios 库的支持。可以通过 NPM 或 Yarn 来安装 Axios[^5]: ```bash npm install axios --save ``` 或者, ```bash yarn add axios ``` #### 2. 配置 Axios 实例(可选) 为了更好地管理请求参数和拦截器等功能,建议创建一个独立的 Axios 实例[^3]。可以在 `src/plugins/axios.js` 文件中完成配置: ```javascript // src/plugins/axios.js import axios from 'axios'; const instance = axios.create({ baseURL: 'https://example.com/api', // 替换为目标服务器地址 timeout: 10000, responseType: 'blob' // 设置响应类型为 blob,用于接收文件数据 }); export default instance; ``` 此设置中的 `responseType: 'blob'` 是关键部分,它告诉浏览器将返回的数据作为二进制大对象 (Blob) 处理而不是默认 JSON 格式[^4]。 #### 3. 组件内的方法实现 接下来是在 Vue 组件内部编写逻辑以触发文件下载操作。下面是一个完整的例子展示如何发起 GET 请求获取远程资源并将之保存到本地磁盘上[^1]: ```javascript <template> <button @click="downloadFile">点击下载</button> </template> <script> import axiosInstance from '@/plugins/axios'; export default { name: "DownloadComponent", methods: { downloadFile() { const url = '/api/download/sample.pdf'; // 假设这是你要访问的服务端接口路径 axiosInstance.get(url, { headers: {'Authorization': 'Bearer token'} // 如果有身份验证需求的话加入相应头信息 }) .then((response) => { let fileName = ''; // 获取文件名的方式取决于服务端返回的内容 if(response.headers['content-disposition']){ var temp = response.headers['content-disposition'].split("filename="); fileName = decodeURI(temp[temp.length - 1]); } const link = document.createElement('a'); link.href = URL.createObjectURL(new Blob([response.data])); link.setAttribute('download', fileName || 'unknown-file'); // 默认名称未知情况下给定替代方案 document.body.appendChild(link); link.click(); link.remove(); }).catch(err=>{ alert(`发生错误:${err.message}`); }); } }, }; </script> ``` 上述代码片段展示了几个重要概念: - **headers**: 可能会根据实际情况调整比如添加认证令牌等额外字段; - **responseType='blob'**: 已经提前设定好以便于解析非JSON类型的回复体; - 动态生成 `<a>` 元素并通过 JavaScript 手动模拟用户行为从而启动实际意义上的“下载”。 #### 4. 后台支持跨域资源共享(CORS) 当涉及到前后分离架构下的 API 调用时,不可避免要面对 CORS(跨源资源共享)问题。如果目标主机不允许来自当前页面域名发出的请求,则需修改服务器端策略允许特定来源访问指定资源。对于某些场景还可以考虑利用反向代理机制规避此类限制条件。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值