下载文件作为前端常用技术,那么当后端给前端返回的是一串数据流的时候,我们应该怎么去解析并下载该文件呢?

很简单,

首先,我们只需要在调用该下载接口的时候顺便将blob(二进制大对象,可以存储二进制文件的一个容器)当作一个参数传递给后端,具体代码如下:

export const downloadUpload = (id)=>axios.get(`下载路径+下载文件id`, {responseType: 'blob'});

其中第一个参数为文件的下载路径及文件id 第二个参数就是我上面说的blob了。

如果我们没有传递第二个参数会得到什么呢?请看下图:

 当你传递了第二个参数,并且代码正确的话,得到的应该是这样:

第一步设置好以后咱们进入下一步:

首先我们调用该设置好的函数,拿到后端给的返回值,然后请看下图

downloadUpload(id).then((res) => {
    console.log(res);
    const link = document.createElement('a');  //创建一个a标签
    const blob = new Blob([res]);             //实例化一个blob出来
    link.style.display = 'none';       
    link.href = URL.createObjectURL(blob);    //将后端返回的数据通过blob转换为一个地址
    //设置下载下来后文件的名字以及文件格式
    link.setAttribute(
      'download',
      `${upload.fileName}.` + `${upload.fileExtension}`,     //upload为下载的文件信息 可以在外层包一个函数 将upload作为参数传递进来
    );
    document.body.appendChild(link);
    link.click();                            //下载该文件
    document.body.removeChild(link);
  });

至此,文件就可以成功下载下来啦!!!!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐