vue实现zip格式文件的下载,总结一下

话不多说 这次项目需求 需要下载zip格式的文件,前后使用了axios和fetch去调用都成功了,下面我来把细节代码展示出来

Axios

axios去下载的方法略有繁琐,是因为fetch有独特的封装方法,代码如下:

 axios({
      method: 'POST', //这个不解释了吧
      url,           //路径
      data: params, //传参
      responseType: 'blob', //告诉服务器想到的响应格式
      headers: { 'Content-Type': 'application/json; application/octet-stream' },
    })
      .then(res => {
        let blob = new Blob([res.data], { type: 'application/zip' }); //设置下载的内容以及格式
        const url = window.URL.createObjectURL(blob); //设置路径
        const link = window.document.createElement('a'); // 创建a标签
        link.href = url;
        link.download = '文件'; //设置文件名
        link.style.display = 'none';
        link.click();
        URL.revokeObjectURL(url); // 释放内存
      })
      .catch(function (error) {
        showMessage('下载失败', 'error');
        console.log(error);
      });

需要注意:

这里我们需要注意的是

  1. responseType: ‘blob’ 这个参数非常重要,一般不写默认是text,但如果后端返回的是数据流,那么就是一通乱码,此时需要定义为blob,告诉服务器自己需要的响应格式。
  2. 创建blob对象的时候 第一个参数往往是返回的那一串乱码 把他放到数组中,第二个参数是设置下载的格式,这里我们的zip,所以是application/zip,
    其他类型如下:
    .doc => application/msword
    .docx => application/vnd.openxmlformatsofficedocument.wordprocessingml.document
    .xls => application/vnd.ms-excel
    .xlsx => application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
    .ppt => application/vnd.ms-powerpoint
    .pptx => application/vnd.openxmlformats-officedocument.presentationml.presentation
  3. 如果使用了axios的方法,一定要注意项目文件中main.js或者main.ts是否引入了Mock,如果引入一定要隐藏,否则axios的下载的文件夹会受损!!(含泪提示,作者因为这个坑点,耽误了一下午的功夫)

Fetch

fetch的方法就省事很多,但也要注意,fetch传post文件的时候,需要先将参数转为字符串!

 fetch(url, {
      body: JSON.stringify(params),
      method: 'POST',
      headers: {
        Accept: 'application/json',
        'Content-Type': 'application/json',
      },
    }).then(res => {
      res.blob().then(blob => {
        // 转化为blobURL后再通过a标签下载
        const blobUrl = window.URL.createObjectURL(blob);
        const a = window.document.createElement('a');
        a.href = blobUrl;
        a.download = '文件.zip';
        a.click();
        window.URL.revokeObjectURL(blobUrl);
      });
    });

fetch自带的blob方法可以让我们省事很多,同时不需要考虑main,js是否引入mock的问题,唯一注意参数需要转为字符串。

下载之后如下所示!
在这里插入图片描述

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
wps-view-vue是一个基于Vue框架开发的文件在线预览组件,它可以帮助我们实现对blob格式文件的在线预览。下面我将详细介绍如何使用wps-view-vue来预览blob格式文件。 首先,我们需要在项目中引入wps-view-vue组件,可以通过npm或者其他方式进行安装。在Vue的组件中,我们可以使用import语句导入wps-view-vue组件。 ``` import WpsView from 'wps-view-vue' ``` 接下来,我们在Vue组件中使用wps-view-vue组件,并传入blob格式的文件数据作为参数。 ``` <template> <div> <wps-view :blob="fileBlob" /> </div> </template> <script> import WpsView from 'wps-view-vue' export default { components: { WpsView }, data() { return { fileBlob: null } }, mounted() { // 获取blob格式文件数据,可以是通过接口请求获取到的 // 这里假设我们通过axios发送请求获取到了blob格式的文件数据 axios.get('http://example.com/api/file', { responseType: 'blob' }) .then(response => { this.fileBlob = response.data }) .catch(error => { console.error(error) }) } } </script> ``` 以上代码中,我们将获取到的blob格式文件数据赋值给fileBlob变量,并作为参数传递给wps-view组件。 通过以上步骤,我们就可以在Vue项目中使用wps-view-vue组件实现对blob格式文件的在线预览了。wps-view-vue组件会根据文件类型选择合适的预览方式,确保用户可以在浏览器中直接查看和操作blob格式文件。这样可以提升用户的使用体验,并且方便用户对文件进行相关操作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值