解决vue下载后台传过来的乱码流的问题

yizhihongxing

解决vue下载后台传过来的乱码流的问题可以分为以下几个步骤:

  1. 确认后台接口返回的数据是正确编码的,比如UTF-8。
  2. 在vue中通过axios等网络请求库获取数据时,设置responseType为'blob',这样能保证我们得到的数据是二进制的。
  3. 通过FileReader读取二进制数据,并转换为String。
  4. 创建Blob对象,将转换后的String数据存入该对象中。
  5. 创建a标签,设置href属性为Blob对象的URL,设置download属性为文件名,模拟点击该标签,浏览器会下载该文件。

示例1:

// 请求数据,设置responseType为'blob'
axios.get('http://example.com/data', { responseType: 'blob' })
  .then(response => {
    // 将二进制流转换为字符串
    const reader = new FileReader()
    reader.readAsText(response.data, 'utf-8')
    reader.onload = () => {
      const data = reader.result
      // 将字符串存入Blob对象中
      const blob = new Blob([data], { type: 'application/pdf' })
      // 创建a标签,设置href属性为Blob对象的URL,设置download属性为文件名
      const link = document.createElement('a')
      link.href = URL.createObjectURL(blob)
      link.download = 'file.pdf'
      // 模拟点击该标签,浏览器会下载该文件
      link.click()
    }
  })

示例2:

// 定义一个工具函数,保证response.data为字符串类型
function convertBlobToString(response) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader()
    reader.readAsText(response.data, 'utf-8')
    reader.onload = () => {
      const data = reader.result
      resolve(data)
    }
    reader.onerror = () => {
      reject(new Error('Failed to convert blob to string'))
    }
  })
}

// 请求数据,设置responseType为'blob'
axios.get('http://example.com/data', { responseType: 'blob' })
  .then(response => {
    // 将二进制流转换为字符串
    return convertBlobToString(response)
  })
  .then(data => {
    // 将字符串存入Blob对象中
    const blob = new Blob([data], { type: 'application/pdf' })
    // 创建a标签,设置href属性为Blob对象的URL,设置download属性为文件名
    const link = document.createElement('a')
    link.href = URL.createObjectURL(blob)
    link.download = 'file.pdf'
    // 模拟点击该标签,浏览器会下载该文件
    link.click()
  })
  .catch(error => {
    console.error(error)
  })

以上是解决vue下载后台传过来的乱码流的问题的完整攻略,其中包含了两条示例说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解决vue下载后台传过来的乱码流的问题 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 使用vue-cli创建vue2项目的实战步骤详解

    下面就是使用vue-cli创建vue2项目的实战步骤详解: 步骤一:安装node.js和npm 在使用vue-cli创建vue2项目之前,需要先安装node.js和npm,这里就不再赘述了,如果还没安装的话可以到node.js官网下载安装包进行安装。 步骤二:安装vue-cli 使用npm全局安装vue-cli,执行如下命令: npm install -g …

    Vue 2023年5月27日
    00
  • 稍微学一下Vue的数据响应式(Vue2及Vue3区别)

    下面我将详细讲解“稍微学一下Vue的数据响应式(Vue2及Vue3区别)”的完整攻略,分别介绍Vue2和Vue3的数据响应式机制。 Vue2数据响应式 响应式的原理 Vue2使用的是“响应式系统”的概念来实现数据的双向绑定。即将数据对象传递给Vue实例后,Vue会监视数据的变化,在数据变化时通知视图进行更新。 数据的监测基于Object.defineProp…

    Vue 2023年5月27日
    00
  • vue踩坑记录:属性报undefined错误问题

    当你使用Vue.js构建自己的应用时,可能会遇到属性报undefined错误问题,这种问题会造成很大的困扰。下面让我们详细讲解一下怎么解决这个问题。 问题原因 首先我们需要明确这个错误的原因,常见的错误原因有以下几种: 将变量名写错了。 Vue组件的作用域问题。 Vue组件内部的变量和外部的变量命名冲突问题。 快速解决 如果您遇到属性报undefined错误…

    Vue 2023年5月27日
    00
  • vue前端通过腾讯接口获取用户ip的全过程

    下面是详细讲解“vue前端通过腾讯接口获取用户ip的全过程”的完整攻略。 一、方案选择 在进行获取用户IP的操作时,我们可以通过调用第三方API对用户IP进行定位。由于腾讯云提供了一套稳定、准确的IP定位服务,我们可以选择调用腾讯云的IP定位API来获取用户IP。 二、调用腾讯IP定位API 腾讯IP定位API提供了两个版本:HTTP版本和HTTPS版本。我…

    Vue 2023年5月28日
    00
  • ant-design-vue 快速避坑指南(推荐)

    Ant Design Vue 快速避坑指南 Ant Design Vue 是一款基于 Vue.js 的 UI 组件库,它提供了许多丰富的组件,如按钮、表单、弹窗等等。使用 Ant Design Vue 可以大大缩短前端开发时间,但是使用过程中也会遇到一些坑点,本文将介绍 Ant Design Vue 的使用指南及避坑秘籍。 安装 要使用 Ant Design…

    Vue 2023年5月28日
    00
  • Vue自定义图片懒加载指令v-lazyload详解

    当我们访问一个页面时,图片数量很多,如果立即全部加载会占用很多带宽和资源,降低用户体验,所以利用图片懒加载技术可以解决这个问题。Vue自定义指令v-lazyload实现图片的懒加载效果。 1. v-lazyload指令的原理 该指令的原理是在图片的可见区域内,进行异步加载图片,只有当图片出现在可见区域内时才加载,利用了IntersectionObserver…

    Vue 2023年5月28日
    00
  • vue3组合API中setup、 ref、reactive的使用大全

    Vue 3 组合式 API 中 setup、ref、reactive 的使用大全 Vue 3 是 Vue.js 的最新版本,全面升级了组件系统并引入了新的组合 API,使得 Vue.js 在开发复杂应用时更加灵活可维护。其中 setup、ref、reactive 是 Vue 3 组合式 API 中最常用的三个方法,可以帮助我们快速地实现组件的数据响应式和逻辑…

    Vue 2023年5月28日
    00
  • vue3基础组件开发detePicker日期选择组件示例

    下面是针对“vue3基础组件开发detePicker日期选择组件”的完整攻略: 准备工作 在项目中引入vue 和 date-fns; 创建 datePicker.vue 组件,编写基础模板代码; 在datePicker.vue组件中引入样式文件,并设置CSS样式; 模板编写 以下是示例代码: <template> <div class=&q…

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