解决axios请求文件流前端通过new Blob完成文件流下载文件打不开

这篇具有很好参考价值的文章主要介绍了解决axios请求文件流前端通过new Blob完成文件流下载文件打不开。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.首先请求封装axios的请求方式

2.根据接口文档查看文件流的请求类型

3.请求Methods

4.以上写完以后,好消息是文件可以成功下载

4.1坏消息是文件竟然是个损坏文件打不开,修复了也是乱码

5.解决问题

5.1 前端做文件下载有很多方式,前端返回文件流需要我们在axios请求封装新增一个文件下载请求,专门处理Blob文件流的请求,其中 responseType:"blob" 类型必须写


1.首先请求封装axios的请求方式

const service = axios.create({
  baseURL:"" ,
  timeout: 5000
})

export const http ={
  get<T>(url: string, params: any):Promise<T> {
    return request({
      url,
      method: 'get',
      params
    })
  },
  postJson<T>(url: string, data: any):Promise<T> {
    return request({
      url,
      method: 'post',
      headers: { 'Content-Type': 'application/json' },
      data
    })
  }
}

2.根据接口文档查看文件流的请求类型

这边两种请求方式都有,以下按照post为例子

new blob([responsedata]);文件打不开,前端开发常见bug,前端,vue.js,ajax,excel

请求api模块  "@/api/download"

new blob([responsedata]);文件打不开,前端开发常见bug,前端,vue.js,ajax,excel

3.请求Methods

import { postDownload } from "@/api/download"
// 导出事件
const ExportMethods = () => {
    // 1.ts类型规范返回的结果为Blob类型
    const res: Blob = await postDownload()  
    // 2.文件流存在,创建下载路径触发下载
    if (res) { 
      const blob = new Blob([res], { type: 'application/vnd.ms-excel; charset=utf-8' })
      const link = document.createElement('a')
      link.href = URL.createObjectURL(blob)
      link.download ='Excel.xlsx'
      link.click()
      // 3.一定要释放URL对象
      URL.revokeObjectURL(link.href)
    }
  })
}

4.以上写完以后,好消息是文件可以成功下载

new blob([responsedata]);文件打不开,前端开发常见bug,前端,vue.js,ajax,excel

4.1坏消息是文件竟然是个损坏文件打不开,修复了也是乱码

new blob([responsedata]);文件打不开,前端开发常见bug,前端,vue.js,ajax,excel

5.解决问题

5.1 前端做文件下载有很多方式,前端返回文件流需要我们在axios请求封装新增一个文件下载请求,专门处理Blob文件流的请求,其中 responseType:"blob" 类型必须写

const http ={
  // 导出blob文件流
  downloadBlobFile<T>(url: string, data: any):Promise<T> {
    return request({
      url,
      method: 'post',
      data,
      responseType: 'blob'  // 此类型必须标注,否则下载的文件就是损坏的
    })
  }
}

修改api的请求函数

new blob([responsedata]);文件打不开,前端开发常见bug,前端,vue.js,ajax,excel

组件中使用方法不变,再次导出发现解决问题

new blob([responsedata]);文件打不开,前端开发常见bug,前端,vue.js,ajax,excel

new blob([responsedata]);文件打不开,前端开发常见bug,前端,vue.js,ajax,excel

对你有帮助的话,点个赞呗文章来源地址https://www.toymoban.com/news/detail-857355.html

到了这里,关于解决axios请求文件流前端通过new Blob完成文件流下载文件打不开的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue 后端返回二进制流-前端通过blob对象下载文件-图片

    前言 在实际开发中我们经常会遇见下载文件的场景,比如下载合同,下载文件 下载文件有2种方式,一种是后端返回二进制流,前端通过blob对象接受根据不同类型下载 还有一种把地址直接在浏览器新窗口打开浏览器打开pdf可以预览和下载,其他文件直接下载 但不管是那种方

    2024年02月05日
    浏览(58)
  • axios请求设置responseType为‘blob‘或‘arraybuffer‘下载时,正确处理返回值

    问题:调用后台图片接口,后台返回二进制流图片数据格式。前端接收到流后处理数据显示在img标签。 解决: 1、设置axios接收参数格式为\\\"arraybuffer\\\": 2、转换为base64格式图片数据在img标签显示: 返回的string直接放在img标签src可直接显示 二、设置axios接收参数格式为\\\"blob\\\":

    2023年04月09日
    浏览(31)
  • react通过axios发送请求并演示配置多个反向代理地址解决跨域

    这里 我们准备一个接口 我这里用java写了一个 然后 我们打开react项目 安装axios 然后在src下创建一个setupProxy.js 编写代码如下 可以看到 这里我们配了两个方向代理 如果请求的路中 包含api 就会代理成 http://localhost:8080/请求路径 如果包含user则会成为 http://localhost:808/请求路径 这

    2023年04月10日
    浏览(37)
  • Vue 之 new Blob() 文件流下载文件不同文件类型的 type 值整理

    在 Vue 项目中,经常用 Blob 二进制进行文件下载功能(vue后台返回文件流下载导出函数封装、调用示例),涉及不同后缀名的文件,这里整理一份 Blob 的配置关系对应表,在我们使用Blob做下载功能时 ,根据需要下载的文件类型修改 type 值进行下载即可。 后缀名 文件类型 类型

    2024年02月02日
    浏览(32)
  • 后端返回文件流,前端用blob转换后,下载的文件乱码或者打不开怎么解决

    1、确认接口有没有设置 responseType: “blob” 2、使用blob转换,res 是 后端返回的文件流 3、如果文件还是打不开,提示文件格式不对……,那就看看项目中有没有引用 mockJs ,有的话注释掉就可以啦

    2024年02月16日
    浏览(43)
  • vue2前端使用axios发起post请求,后端(springboot)拿不到值解决办法

    axios封装-我常用的请求头参数  application/json; charset=utf-8 页面登录请求-post 网络请求正常传入参数 后端代码,查看控制台发现都为null,没取到值。 1.尝试将前端post请求改成get,其他都不用变 发现正常取到值,打印输出正常。前端页面正常跳转。 2.后端设置为post请求,前端a

    2024年02月02日
    浏览(36)
  • 前端异步请求并解决跨域问题(Ajax+axios框架)、后端响应多个数据(JSON)

    目录 一、前后端同步异步请求 1.同步请求: 2.异步请求: 3.跨域问题(前端问题) 4.axios框架(封装后) 二、后端向前端响应多个数据-JSON 1.同步请求:         发送一个请求,回应请求,回应的内容会覆盖浏览器中的内容,这样会 打断 前端其他的正常操作。 2.异步请求:

    2024年02月07日
    浏览(54)
  • vue axios实现下载文件及responseType:blob注意事项

    需要使用axios和js-file-download组件 注意事项: responseType:blob表示服务器返回的响应类型是二进制流,一般用于文件、视频下载等场景。正常情况下后端返回二进制数据,当后端服务器出错时,往往会以json形式返回错误信息,例如{\\\"code\\\":500,\\\"msg\\\":\\\"未知异常\\\"}。因为设置了blob类型,

    2024年02月11日
    浏览(31)
  • ElementUI之登陆+注册->饿了吗完成用户登录界面搭建,axios之get请求,axios之post请求,跨域,注册界面

     饿了吗完成用户注册登录界面搭建 axios之get请求 axios之post请求 跨域 注册界面 1.饿了吗完成用户注册登录界面搭建 将端口号8080改为8081 导入依赖,在项目根目录使用命令npm install element-ui -S,添加Element-UI模块 -g:将依赖下载node_glodal全局依赖 -d(依赖放在static/[]package.json的

    2024年02月04日
    浏览(41)
  • 前端向Java后端请求blob、arraybuffer类型的数据流

    前端需要获取后端音频文件,但遇到跨域问题,不能直接使用url获取,需求必须使用流将文件传到前端。因此,考虑Java后端读取音频文件,然后向前端发送数据流,前端按后端发送类型将数据接收,并合成其格式文件。 引入axios.min.js文件 其中,responseType:‘arraybuffer’,写成

    2024年02月13日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包