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

解决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路由模块化配置的完整步骤

    当使用Vue.js开发单页面应用程序时,路由管理通常是必不可少的功能之一。Vue Router是Vue.js官方提供的路由管理器,它可以轻松地集成到Vue.js应用中,并且在开发过程中为我们提供了许多有用的功能。 Vue Router支持模块化配置,我们可以将路由配置拆分为多个独立的模块,以便更好地组织和管理我们的代码。下面是Vue路由模块化配置的完整步骤:…

    Vue 2023年5月28日
    00
  • 详解离线安装npm包的几种方法

    当我们需要使用npm包时,通常我们会使用npm命令在线安装。但是,某些情况下我们可能需要离线安装npm包,比如网络环境不佳或无法联网的情况下。 本文将为大家详细讲解“详解离线安装npm包的几种方法”。 方法一:使用npm install命令 在网络良好的情况下,可以使用npm install命令将需要的npm包从线上下载到本地文件系统,这样就可以在没有网络的…

    Vue 2023年5月28日
    00
  • vue全局过滤器概念及注意事项和基本使用方法

    vue全局过滤器概念及注意事项和基本使用方法 在Vue中,全局过滤器是一个简单的函数,用于将文本转换为更易读的格式。全局过滤器可以用于处理日期格式、价格格式、将字符串转换为小写等多种情况。全局过滤器可以在任何Vue组件的模板中使用。 注意事项 在使用全局过滤器时,需要注意以下几点: 全局过滤器一旦定义,就可以在整个应用程序中使用。因此,需要在定义全局过滤器时…

    Vue 2023年5月27日
    00
  • Vue双向绑定实现原理与方法详解

    下面为你讲解“Vue双向绑定实现原理与方法详解”的完整攻略。 一、双向绑定概述 首先要清楚什么是双向绑定,Vue.js 的核心特性之一就是「数据驱动」,它允许我们把应用程序分成一个庞大的部分,其中一些部分是响应用户操作的。双向数据绑定是该特性的主要实现方式之一,它指的是两个相关联的变量之间的同步变化,也就是当其中一个变量修改时,另一个变量也会同步修改。 二、…

    Vue 2023年5月28日
    00
  • vue 组件基础知识总结

    Vue 组件基础知识总结 1. 什么是组件? 组件是 Vue.js 最核心的概念之一,它是将整个页面划分为一个个独立的、可复用的模块,每个模块都有自己的状态、行为以及样式。 组件能够使得我们的代码更加模块化,具备高可复用性,提高代码的可维护性,以及对页面进行灵活组合。 2. 组件定义方法 在 Vue 中,组件采用 “Vue.extend” 或者“Vue.co…

    Vue 2023年5月28日
    00
  • vue如何判断数组中的对象是否包含某个值

    当需要在Vue中判断数组中的对象是否包含某个特定值时,可以使用JavaScript中的find()函数和includes()函数来实现。 使用find()函数 find()函数返回数组中第一个符合条件的元素值,如果没有符合条件的元素则返回undefined。可以将find()函数与箭头函数配合使用来查找数组中特定对象是否存在。 以下是一个示例: const …

    Vue 2023年5月27日
    00
  • vue.js在标签属性中插入变量参数的方法

    在Vue.js中,我们可以使用{{ }}来插入数据,这个特性被称为数据绑定。但在某些情况下,我们想要在标签属性中插入变量,该怎么做呢?下面是详细攻略和示例说明。 使用v-bind指令 在 Vue.js 中,我们可以使用指令 v-bind 来动态地绑定一个或多个属性,这也是在标签属性中插入变量的一种方式。 示例1:动态绑定class属性 <templat…

    Vue 2023年5月27日
    00
  • 浅谈vue使用axios的回调函数中this不指向vue实例,为undefined

    在Vue项目中,我们通常使用 axios 来进行 HTTP 请求。但是,在 axios 的回调函数中, this 的指向经常会出现问题,指向的不是 Vue 实例,而是 undefined。这种情况通常发生在箭头函数、回调函数嵌套等场景中。 为了解决这个问题,我们可以采取以下两种方法: 方法一:使用箭头函数 ES6 的箭头函数可以继承上下文中的 this,因此…

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