vue后台返回格式为二进制流进行文件的下载方式

yizhihongxing

当我们在处理后台返回的文件下载数据时,有时候会遇到后台返回数据格式为二进制流的情况。这种格式的数据在前端界面上无法直接显示,需要通过特殊的处理方式进行文件下载。下面是完整攻略。

1. 后台设置content-type

第一步是需要后台在返回数据时设置content-type为“application/octet-stream”,这个content-type是二进制流格式的标准类型。

下面是Java后台的示例代码:

// 设置响应头Content-Type
response.setContentType("application/octet-stream");
// 设置响应头打开方式为attachment,表示需要进行文件下载
response.setHeader("Content-Disposition", "attachment;filename=" + file.getName());

2. 前端通过axios接收数据

接下来,前端通过axios接收后台返回的二进制流数据。在发送axios请求时需要设置responseType为‘blob’,表示返回的数据为二进制流。

axios({
  method: 'get',
  url: '/fileDownload',
  responseType: 'blob', // 告诉axios需要返回二进制流数据
  params: {
    fileName: 'example.doc'
  }
}).then(response => {
  const blob = new Blob([response.data])
  const fileName = response.headers['content-disposition'].split('=')[1] // 获取文件名
  // 创建一个a标签,利用浏览器内置下载功能进行文件下载
  const downloadLink = document.createElement('a')
  downloadLink.href = URL.createObjectURL(blob)
  downloadLink.download = fileName
  document.body.appendChild(downloadLink)
  downloadLink.click()
  document.body.removeChild(downloadLink)
})

在axios获取数据后,需要将获取到的数据转换成blob对象。之后,我们需要从response header里获取content-disposition变量,来获取文件名。接着,我们创建一个a标签,设置href属性为blob链接,download属性为文件名,然后调用click方法来触发下载。

示例一:下载图片

假设后台返回一张图片,我们先通过axios获取数据,然后将获取到的blob数据转换成URL,将URL赋值给一个img元素的src属性,在页面上渲染该图片。

axios({
  method: 'get',
  url: '/imageDownload',
  responseType: 'blob',
}).then(response => {
  const blob = new Blob([response.data])
  const imgUrl = URL.createObjectURL(blob)
  const img = document.createElement('img')
  img.src = imgUrl
  document.body.appendChild(img)
})

示例二:下载PDF文件

假设后台返回一个PDF文件,我们先通过axios获取数据,然后将获取到的数据转换成blob对象,最后通过设置a标签的href来触发下载。

axios({
  method: 'get',
  url: '/pdfDownload',
  responseType: 'blob',
}).then(response => {
  const blob = new Blob([response.data], {type: 'application/pdf'})
  const fileName = response.headers['content-disposition'].split('=')[1]
  const downloadLink = document.createElement('a')
  downloadLink.href = URL.createObjectURL(blob)
  downloadLink.download = fileName
  document.body.appendChild(downloadLink)
  downloadLink.click()
  document.body.removeChild(downloadLink)
})

以上就是使用Vue进行文件下载的完整攻略,注意,在实际使用过程中还需要进行细节处理,比如服务器响应时间较长时的loading问题、异常处理等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue后台返回格式为二进制流进行文件的下载方式 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • layui.js实现的表单验证功能示例

    下面是 “layui.js实现的表单验证功能示例” 的完整攻略。 一、什么是layui.js layui.js 是一款简易的前端 UI 解决方案,是由著名的前端开源组织“贤心之家”维护开发的。layui.js 主要包括丰富的UI组件和一套简单的前端模板。 在 layui.js 中,表单验证是其中之一的功能,该功能具有高度的可定制性和易用性。 二、表单验证的基…

    JavaScript 2023年6月10日
    00
  • JS中prototype的用法实例分析

    接下来我将为你详细介绍“JS中prototype的用法实例分析”的完整攻略。 什么是Prototype JS中的每一个对象都有一个Prototype链,它指向了另一个对象,这个对象叫做“原型”,这样就可以实现某些属性和方法的继承。 当我们需要给一个JS对象添加属性或方法时,可以通过prototype来实现。在使用prototype属性时,我们需要明确两点: …

    JavaScript 2023年6月11日
    00
  • js使用swiper实现层叠轮播效果实例代码

    以下是详细的js使用swiper实现层叠轮播效果实例代码的攻略。 1. 环境搭建 1.1 引入Swiper 第一步需要引入Swiper,可以使用CDN方式引入,也可以下载后引入。 <link rel="stylesheet" href="https://unpkg.com/swiper/swiper-bundle.min.…

    JavaScript 2023年6月11日
    00
  • 使用javaScript动态加载Js文件和Css文件

    使用JavaScript动态加载JS文件和CSS文件是一种常见的前端技巧,可以帮助优化网页加载速度,提升用户体验。下面是实现这个技巧的完整攻略: 动态加载JS文件 动态加载JS文件通常分为两种方式:利用script标签动态插入和利用XMLHttpRequest请求代码并执行。 利用script标签动态插入 通过在HTML文档中添加一个script标签,并设置…

    JavaScript 2023年5月27日
    00
  • JavaScript接口的实现三种方式(推荐)

    下面是关于“JavaScript接口的实现三种方式(推荐)”的详细攻略: 什么是JavaScript接口? JavaScript接口是指一种约定,它定义了一个或多个方法或属性,用于描述某个对象或类应该具备的行为和特征。JavaScript接口常用于实现对象的多态性和抽象性,从而增强代码的可扩展性和可维护性。 JavaScript接口的实现方式 下面介绍三种常…

    JavaScript 2023年5月27日
    00
  • 使用JavaScript 定义自己的ajax函数

    使用JavaScript 定义自己的ajax函数,可以避免使用第三方库,能够更好地对代码进行掌控,实现更精细化的交互效果。 以下是使用JavaScript 定义自己的ajax函数的完整攻略及示例说明: 定义ajax函数 我们可以使用 JavaScript 进行定义 ajax 函数,以便方便在后续的代码中使用。下面展示一个基本的 ajax 函数定义示例: fu…

    JavaScript 2023年6月11日
    00
  • 关于js里的this关键字的理解

    关于JS中的this关键字 在JavaScript中,this关键字是一个非常重要的概念,有着不同的用法和含义。在不同的情况下它所代表的对象也不同,因此理解this的含义和使用场景显得非常重要。 this的指向 在JavaScript中,this表示当前函数的执行上下文。根据函数的调用方式不同,this指向的对象也不同。 通常来说,this的指向可以分为以下…

    JavaScript 2023年6月10日
    00
  • JavaScript 对象新增方法defineProperty与keys的使用说明

    JavaScript 对象新增方法 defineProperty 与 keys 的使用说明 1. defineProperty方法 defineProperty方法是 JavaScript 对象中新增的方法,适用于控制对象属性添加或修改操作。 语法:Object.defineProperty(object, propertyname, descriptor)…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部