Vue不能下载xls以及文件乱码问题解决

下面我来详细讲解Vue不能下载xls以及文件乱码问题的解决方法。

问题描述

在Vue项目中,可能出现下载xls文件时出现乱码或者无法下载的情况。这是因为Vue框架默认的数据传输格式是JSON,无法直接传输二进制文件,需要经过一定的处理解决才能实现文件下载。

解决方法

解决Vue不能下载xls以及文件乱码问题,需要进行以下几个步骤:

1. 设置服务端响应头

在服务端响应头中设置Content-Type和Content-Disposition,其中Content-Type为文件类型,Content-Disposition为在浏览器中弹出下载框的设置。代码如下:

let filename = 'test.xls'; // 文件名
res.setHeader('Content-Type', 'application/vnd.ms-excel;charset=utf-8');
res.setHeader('Content-Disposition', 'attachment;filename=' + encodeURIComponent(filename));

2. 将文件流转化为blob对象

在前端中,我们需要将服务端返回的二进制流文件转化为blob对象,代码如下:

let blob = new Blob([res.data], { type: 'application/vnd.ms-excel' });
let downloadElement = document.createElement('a');
let href = window.URL.createObjectURL(blob); // 创建下载链接
downloadElement.href = href;
downloadElement.download = filename; // 下载后文件名
document.body.appendChild(downloadElement);
downloadElement.click();
document.body.removeChild(downloadElement); // 下载完成移除元素
window.URL.revokeObjectURL(href); // 释放掉URL对象

将blob对象转化为URL,然后生成一个a标签,设置下载链接和下载文件名,最后模拟点击下载链接实现文件下载。

3. 处理乱码问题

有时候在下载xls文件时,会出现中文乱码的情况。此时需要在服务端设置charset为utf-8,同时将文件名使用encodeURIComponent进行编码,代码如下:

let filename = '测试.xls'; // 文件名为中文
res.setHeader('Content-Type', 'application/vnd.ms-excel;charset=utf-8');
res.setHeader('Content-Disposition', 'attachment;filename=' + encodeURIComponent(filename));

在前端使用decodeURIComponent进行解码,代码如下:

let downloadElement = document.createElement('a');
let href = window.URL.createObjectURL(blob); // 创建下载链接
downloadElement.href = decodeURIComponent(href);
downloadElement.download = decodeURIComponent(filename); // 下载后文件名
document.body.appendChild(downloadElement);
downloadElement.click();
document.body.removeChild(downloadElement); // 下载完成移除元素
window.URL.revokeObjectURL(href); // 释放掉URL对象

示例说明

示例一

下面是一个使用axios进行文件下载的示例:

downLoadExcel() {
  axios({
    method: 'get',
    url: `/api/excel`,
    responseType: 'arraybuffer'
  }).then((res) => {
    let blob = new Blob([res.data], { type: 'application/vnd.ms-excel' });
    let filename = 'test.xls';
    let downloadElement = document.createElement('a');
    let href = window.URL.createObjectURL(blob); // 创建下载链接
    downloadElement.href = href;
    downloadElement.download = filename;
    document.body.appendChild(downloadElement);
    downloadElement.click();
    document.body.removeChild(downloadElement); // 下载完成移除元素
    window.URL.revokeObjectURL(href); // 释放掉URL对象
  }).catch((error) => {
    console.log(error);
  });
}

示例二

下面是一个使用fetch进行文件下载的示例:

downLoadExcel() {
  fetch(`/api/excel`, {
    method: 'GET',
    headers: {
      'Content-Type': 'application/json;charset=utf-8'
    }
  }).then(res => {
    let filename = 'test.xls';
    res.blob().then(blob => {
      let downloadElement = document.createElement('a');
      let href = window.URL.createObjectURL(blob); // 创建下载链接
      downloadElement.href = href;
      downloadElement.download = filename;
      document.body.appendChild(downloadElement);
      downloadElement.click();
      document.body.removeChild(downloadElement); // 下载完成移除元素
      window.URL.revokeObjectURL(href); // 释放掉URL对象
    })
  }).catch((error) => {
    console.log(error);
  })
}

以上就是Vue不能下载xls以及文件乱码问题的详细解决攻略,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue不能下载xls以及文件乱码问题解决 - Python技术站

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

相关文章

  • 详解Vue 普通对象数据更新与 file 对象数据更新

    详解Vue 普通对象数据更新与 file 对象数据更新 在Vue中,我们可以通过v-model指令来进行表单元素的双向数据绑定,其中包括普通对象数据更新和file对象数据更新。 1.普通对象数据更新 在Vue中,普通对象数据更新非常简单,只需要在Vue实例中定义data数据,然后在需要进行绑定的表单元素上使用v-model指令即可。以下是一个简单的示例,展示…

    Vue 2023年5月28日
    00
  • Vue开发指南之重点知识梳理

    Vue开发指南之重点知识梳理攻略 目录结构 一个Vue.js项目的目录结构一般如下: ├── build // webpack配置文件 │ ├── build.js │ ├── check-versions.js │ ├── utils.js │ ├── vue-loader.conf.js │ ├── webpack.base.conf.js │ ├── …

    Vue 2023年5月27日
    00
  • ant-design-vue中的table自定义格式渲染解析

    Ant Design Vue 是 Ant Design Pro 的 Vue 封装,其中包含了非常丰富强大的组件库。其中,Table 组件是常用的组件之一,在使用时经常需要对数据格式进行处理,这时就需要用到自定义格式渲染。本篇攻略将详细介绍在 Ant Design Vue 中如何进行 Table 的自定义格式渲染。 Step 1: 安装依赖包 在开始使用 An…

    Vue 2023年5月27日
    00
  • vue 指令与过滤器案例代码

    以下是关于 Vue 指令与过滤器的详细攻略: Vue 指令 Vue.js 中的指令是一种特殊的属性,以 v- 开头,并且会在渲染时根据一些逻辑被解析和执行。指令主要是用来操作 DOM 元素的,包括变更元素的文本内容、监听元素的事件、控制元素的显示和隐藏等等。下面是几个常用的指令示例。 v-text 指令 这个指令可以用来替代元素的 innerText 属性,…

    Vue 2023年5月27日
    00
  • 浅析vue给不同环境配置不同打包命令

    为了给不同环境配置不同的打包命令,我们必须先对 Vue CLI 进行配置。下面是详细攻略: 步骤一:安装 Vue CLI 首先,我们需要安装 Vue CLI。可以使用以下命令进行全局安装: npm install -g @vue/cli 安装完成之后,你可以使用以下命令检查是否安装成功: vue –version 如果看到类似以下输出,说明安装成功: @v…

    Vue 2023年5月28日
    00
  • 如何通过Vue实现@人的功能

    下面是一个详细的通过Vue实现@人的功能的攻略: 步骤一:引入框架和相关组件 首先,在Vue项目中引入Vue框架和所需的组件库: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Vue Application…

    Vue 2023年5月28日
    00
  • 详解Vue CLI 3.0脚手架如何mock数据

    具体来说,要讲解如何在Vue CLI 3.0脚手架中使用mock数据,我们需要以下内容: 确定如何安装和使用Vue CLI 3.0,以及搭建本地开发环境。 介绍如何使用Mock.js模拟数据,并在Vue项目中引入。 在Vue脚手架项目中,讲解如何开启和使用webpack-dev-server的proxy功能,和结合Mock.js进行数据模拟。 通过具体的示例…

    Vue 2023年5月28日
    00
  • package.json文件配置详解

    那我将详细讲解一下“package.json文件配置详解”的攻略。 什么是package.json文件 在讲解package.json文件配置之前,需要先了解一下package.json文件是什么。简单来说,package.json文件是一个在项目根目录下的JSON文件,用于描述项目的相关信息,包括项目的名称、版本、作者、依赖、脚本等等。 package.j…

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