前端接受后端 blob 文件流 并进行展示和下载

请求
这里的 responseType看网上很多种,但是我的这里就是用这个才可以展示成功的,如果这种类型不行,就多试试。

// 预览成果物文件
export const PreviewFile=(data)=>{
  return request({
    url:"/FileHandle/PreviewFile",
    method:"post",
    responseType: 'arraybuffer',
    data
  })
}

我这里用了responseType: 'arraybuffer’后 可以看见返回在控制台的为一些二进制数据
在这里插入图片描述

接收文件流并转成url格式
我们后端返回在控制台的preview东西如下图所示,应该是二进制但是乱码了,不过不影响
在这里插入图片描述
接下来就是前端接收此数据并进行处理:

//res为接口所返回的文件流
var blob = new Blob([res], {
     type: "application/pdf;chartset=UTF-8"
 });
 //var url = window.URL.createObjectURL(blob);
 //新窗口打开
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.target = "_blank";
link.click();

链接类似于blob:http://localhost:8080/d466bf6c-4a02-4892-8c77-fb1533c33c0f
然后就可以直接使用了。

我们的下载也是接收文件流 但是下载的是原文件 所以
接口有点不同
下载的接口是blob类型 如下图
在这里插入图片描述
可能是因为数据类型不一样
在这里插入图片描述
下载代码

      let data = {
        fileGUIDName: this.dowloadFile.file_guid_name
      };
      DownFile(data).then(res => {
        console.log("这是下载的接口res", res);
        var blob = new Blob([res], {
          type: "application/octet-stream;chartset=UTF-8"
        });
        console.log("这是blob", blob);
        var url = window.URL.createObjectURL(blob);
        var a = document.createElement("a");
        a.href = url;
        //文件名
        a.download = this.dowloadFile.file_name;
        a.click();
        //浏览器会直接下载pdf 和 doc 或docx 这里我们公司没做excel等文件的上传预览和下载,所以如果是其他文件应该接口和返回都有点区别。
      });
  • 8
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
前端请求后端下载文件有几种方法,其中包括使用原生servlet的HttpServletResponse方式下载、使用Spring的ResponseEntity方式下载、使用原生ajax之XMLHttpRequest方式下载、使用jQuery的Ajax方式下载以及使用原生ajax之fetch方式下载。具体方法的实现可以参考以下资料: - 原生servlet的HttpServletResponse方式下载:通过设置response对象的响应头信息,将文件写入到响应中,然后前端通过a标签的href属性进行文件下载。参考资料中的"一. 普通文件下载"部分。 - Spring的ResponseEntity方式下载:在后端使用ResponseEntity将文件作为响应体返回,前端通过ajax请求获取文件,并使用Blob对象创建URL进行文件下载。参考资料中的"一.2 Spring的ResponseEntity方式下载"部分。 - 原生ajax之XMLHttpRequest方式下载:通过XMLHttpRequest发送请求,设置responseType为"blob",获取到文件后使用Blob对象创建URL进行文件下载。参考资料中的"三. 文件下载-原生ajax之XMLHttpRequest"部分。 - jQuery的Ajax方式下载:通过$.ajax发送请求,设置dataType为"binary",获取到文件后使用Blob对象创建URL进行文件下载。参考资料中的"四. 文件下载-jQuery的Ajax"部分。 - 原生ajax之fetch方式下载:使用fetch发送请求,设置responseType为"blob",获取到文件后使用Blob对象创建URL进行文件下载。参考资料中的"五. 下载数据库中保存的文件"部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值