当前位置: 首页 > news >正文

后端返回文件流时,前端如何处理并成功下载流文件以及解决下载后打开显示不支持此文件格式

一、文件和流的关系

文件(File)和流(Stream)是既有区别又有联系的两个概念。

文件 是计算机管理数据的基本单位,同时也是应用程序保存和读取数据的一个重要场所。
      存储介质:文件是指在各种存储介质上(如硬盘、可移动磁盘、CD等)永久存储的数据        的有序集合,它是进行数据读写操作的基本对象。
     特性:每个文件都有文件名、文件所在路径、创建时间及访问仅限等属性。

流 是字节序列的抽象概念,例如文件、输入/输出设备、内部进程通信管道等。流提供一种         向后备存储器写入字节和从后备存储器读取字节的方式。
    存储介质:除了和磁盘文件直接相关的文件流以外,流还有多种类型。流可以分布在网络      中、内存中或者是磁带中。

 上图类似于乱码,就是文件流在浏览器中的表现形式。

二、前端处理文件流并下载(Vue)

await this.$http.request({url: `/minioDownload?htitle=${title}`, //这里是你的请求urlresponseType: 'blob', //这里最重要,不要去掉method: 'get', //请求方式,看后台的需求,可能是get,post等方式}).then((res) => {console.log(res);var elink = document.createElement('a');elink.download = name;elink.style.display = 'none';var blob = new Blob([res], { type: 'application/x-msdownload' });elink.href = URL.createObjectURL(blob);document.body.appendChild(elink);elink.click();document.body.removeChild(elink);this.$message.success(`文件下载成功!`)}).catch(err => {console.log(err);});

设置Content-Type 的值为:application/x-msdownload。Web 服务器需要告诉浏览器其所输出的内容的类型不是普通的文本文件或 HTML 文件,而是一个要保存到本地的下载文件

三、解决下载后打开显示不支持此文件格式

这个问题我也遇到了,在网上也搜了好多资料,才得到答案。

比如:

是因为在 axios 中对后端的响应做了拦截,所以new Blob([res])中拿到的res实际上是后端接口的  res.data,只不过这一层操作在全局被封装了。

而如果直接使用的$http.get().then(),并未在全局对请求进行封装拦截。所以在这里需要取得的是   res.data    于是,我把new Blob([res])改成new Blob([res.data])后,问题就解决了。

http://www.lryc.cn/news/69124.html

相关文章:

  • Ansible的脚本-playbook 剧本
  • python lambda表达式表达式详解及应用
  • Windows 10计算机性能优化:让你的电脑更流畅
  • SpringMVC底层原理源码解析
  • 【CSS系列】第八章 · CSS浮动
  • janus videoroom 对接freeswitch conference 篇1
  • cs109-energy+哈佛大学能源探索项目 Part-2.1(Data Wrangling)
  • __101对称二叉树------进阶:你可以运用递归和迭代两种方法解决这个问题吗?---本题还没用【迭代】去实现
  • 怎么取消只读模式?硬盘进入只读模式怎么办?
  • 如何使用Java生成Web项目验证码
  • 【读书笔记】《亲密关系》
  • 面试季,真的太狠了...
  • 2023年十大最佳黑客工具!
  • 每日练习---C语言
  • 边缘计算如何推动物联网的发展
  • 第五章 栈与队列
  • PyQt5桌面应用开发(16):定制化控件-QPainter绘图
  • spring5源码篇(9)——mybatis-spring整合原理
  • 为什么需要防雷接地,防雷接地的作用是什么
  • 如何应用金字塔模型提高结构化表达能力
  • 2023年系统分析师考前几页纸
  • openwrt-安装NGINX
  • Linux安装MongoDB数据库并内网穿透在外远程访问
  • flutter系列之:使用AnimationController来控制动画效果
  • golang 函数调用栈笔记
  • 云端一体助力体验升级和业务创新
  • 【Linux Network】高级IO
  • Python语言基本控制结构
  • 旅游网站版面设计方案
  • sudo unable to open read-only file system”的原因