zoukankan      html  css  js  c++  java
  • 后台返回blob文件流,前端实现下载文件

    后台返回文件流,前端实现下载文件

    BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。

    文档介绍https://developer.mozilla.org/zh-CN/docs/Web/API/Blob/Blob
    在这里插入图片描述

    目的:

    后端返回的文件是一个blob格式的流文件,需要前端进行转码,得到一个url,实现下载文件的功能,
    这里说法比较多,但是没有测试,所以列举几个方法,试用

    首先实现过程

    第一种: 就是先向后端进行请求得到返回数据,进行转blob,
    1.Blob对象的 的类型传值 不传乱码
    2.生成URL的时候 要是不行就写成window.URL.

    //请求回来的数据
    .then(res => {
            let blob = new Blob([res],{
                type:'application/vnd.ms-excel'      //将会被放入到blob中的数组内容的MIME类型
            });
            let objectUrl = URL.createObjectURL(blob);  //生成一个url
            downloadFile(objectUrl,'文件名称')
          })
    downloadFile(content, filename) {
        let a = document.createElement('a')
        a.href = content
        a.download = filename
        a.click()
    }
    
    

    第二种:
    在请求的时候加上 responseType: 'blob' 声明这是一个 blob的返回值,

    //请求回来的数据
    .then(res => {
            let blob = new Blob([res]);
            let objectUrl = URL.createObjectURL(blob);  //生成一个url
            downloadFile(objectUrl,'文件名称')
          })
    downloadFile(content, filename) {
        let a = document.createElement('a')
        a.href = content
        a.download = filename
        a.click()
    }
    

    总结及注意:

    1.就是blob的文件格式你得写,要不在返回值之后写文件格式,要不然请求的时候就告诉后台你是要blob格式的要不然乱码
    2.就都试试,大部分第一种就行
    3.还有人说: axios请求要是在乱码 就加上responseType:'arraybuffer' 试试 或者上面的说的responseType: 'blob'
    4.我觉得应该在封装axios的时候单独封装一个请求文件的下载,这样方便操作,不然要是项目大了,有点别的,牵一发而动全身

  • 相关阅读:
    降维
    latex 中文
    Java基础——通信
    Java基础——文件读取
    Java基础——哈弗曼树的Java实现(构建、遍历输出、哈弗曼编码)
    Java基础——表达式二叉树的Java实现构建(构建+前序、中序、后序遍历)
    MYSQL和ORACLE的一些区别
    快速排序
    冒泡排序
    希尔排序
  • 原文地址:https://www.cnblogs.com/tcz1018/p/14073558.html
Copyright © 2011-2022 走看看