vue下载excel的实现代码后台用post方法

下面我将为你详细讲解“vue下载excel的实现代码后台用post方法”的完整攻略。

  1. 后台代码的实现

首先,后台需要在接口中返回文件流的形式,以便前端能够接收到需要下载的excel文件。具体代码如下:

// 后台 Node.js代码示例
const XLSX = require('xlsx');
const fs = require('fs');
const path = require('path');

const workbook = XLSX.readFile('./test.xlsx');
const bufferData = XLSX.write(workbook,{type: 'buffer', bookType: 'xlsx'});
let fileName = 'testExcel.xlsx';

// 设置响应头信息
res.setHeader('Content-Type','application/octet-stream');
res.setHeader("Content-Disposition", "attachment;filename=" + encodeURI(fileName));
res.setHeader('Content-Length', bufferData.length);

// 直接返回文件流
res.end(bufferData);

上述代码中,我们使用了XLSX库创建了一个名为test.xlsx的excel文件,并将其转换为buffer类型。之后,为了响应下载请求,我们需要设置响应头信息,具体内容如下:

  • Content-Type:设置返回类型为application/octet-stream,表示二进制流
  • Content-Disposition:设置下载文件的文件名(url编码)
  • Content-Length:设置返回文件的长度

最后,我们直接使用res.end()方法将文件流返回给前端即可。

  1. 前端代码的实现

在前端代码实现中,我们需要使用axios库发起POST请求,并在请求成功后获取到返回的文件流,以便能够相应下载。具体代码如下:

// 前端 Vue.js代码示例
import axios from 'axios';
import XLSX from 'xlsx';

// 前端请求POST下载Excel文件的方法
export const downloadExcel = params => {
  return axios({
    method: 'POST',
    url: '/downloadExcel',
    responseType: 'arraybuffer',
    headers: {
      'Content-Type': 'application/json;charset=utf-8',
      'Accept': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    },
    data: params // 发送请求参数
   })
   .then(response => {
      // 导出 Excel 文件
      var blob = new Blob([response.data], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'})
      var fileName = 'testExcel.xlsx'
      var link = document.createElement('a')
      link.href = window.URL.createObjectURL(blob)
      link.download = fileName
      link.click()
   })
}

上述代码中,我们使用axios库发起POST请求,并设置了响应类型为arraybuffer,这样可以正确地获取到后台返回的Excel文件。同时,我们设置了请求头中的Content-TypeAccept,分别表示请求参数的类型和响应参数的类型。在请求成功后,我们使用Blob类型创建了一个二进制对象,并使用创建的URL地址触发下载。

以上即为“vue下载excel的实现代码后台用post方法”的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue下载excel的实现代码后台用post方法 - Python技术站

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

相关文章

  • js正则表达式讲解之index属性(RegExp对象)

    JS正则表达式讲解之index属性(RegExp对象) 什么是正则表达式的index属性? 在JavaScript中,正则表达式是RegExp对象的实例。RegExp对象有一个名为index的属性,用于表示正则表达式匹配的最后一个字符的位置。 例如,对于字符串”hello world”,正则表达式/world/匹配的最后一个字符是d,其在字符串中的位置是8(…

    JavaScript 2023年6月10日
    00
  • 当ES6遇上字符串和正则表达式

    当ES6遇上字符串和正则表达式,能够大大提高我们的编程效率,以下内容将详细讲解ES6与字符串、正则表达式的操作。 字符串 1. 模板字符串 ES6中,我们可以使用模板字符串来更方便的输出变量。 模板字符串用反引号(`)来表示,用${}来表示变量。 示例: const name = ‘小明’; const age = 18; console.log(`我叫${…

    JavaScript 2023年6月11日
    00
  • React-Native之定时器Timer的实现代码

    下面是关于“React-Native之定时器Timer的实现代码”的完整攻略: 什么是定时器? 在React-Native中,我们可以使用定时器来处理一些需要在指定时间间隔内执行的任务。React-Native提供了两种类型的定时器:基于时间间隔的定时器和基于帧率的定时器。此处我们重点讲解基于时间间隔的定时器。 基于时间间隔的定时器用法 React-Nati…

    JavaScript 2023年6月11日
    00
  • 关于TypeScript开发的6六个实用小技巧分享

    下面我将为您详细讲解“关于TypeScript开发的6六个实用小技巧分享”的完整攻略。 1. 引入类型声明文件 在使用第三方库时,通常需要使用类型声明文件(.d.ts)来规范代码。在 TypeScript 中,我们通过 /// <reference types=”…” /> 指令来引入类型声明文件。 例如,引入 jQuery 的类型声明文件:…

    JavaScript 2023年5月19日
    00
  • js实现时分秒倒计时

    JS实现时分秒倒计时 实现思路 实现时分秒倒计时的基本思路如下: 获取倒计时结束时间并转换为时间戳 获取当前时间并转换为时间戳 计算差值并转换为时分秒格式 输出倒计时结果 启动定时器,每秒钟更新一次倒计时结果 代码实现 // 获取元素 const daysEl = document.getElementById(‘days’); const hoursEl …

    JavaScript 2023年5月27日
    00
  • 浅析JavaScript访问对象属性和方法及区别

    我来详细讲解“浅析JavaScript访问对象属性和方法及区别”的完整攻略。下面是内容的组成部分: 前言 在JavaScript编程过程中,对象是一个非常重要的概念。对象允许我们组织和存储数据,并提供了一种访问和操作这些数据的机制。然而,访问和操作对象的属性和方法并不是一件简单的事情。本文将通过示例来浅析JavaScript访问对象属性和方法及它们的区别。 …

    JavaScript 2023年5月27日
    00
  • js只执行1次的函数示例

    当我们在编写JavaScript代码的时候,有时候我们需要保证某个函数只被执行一次。下面我会详细介绍两种方法来实现这个功能。 方法一:自执行函数 自执行函数(IIFE,立即执行函数表达式)是函数式编程中的一种技术,它可以让我们在声明函数时立即调用它一次,保证函数只被执行一次,并且函数内部的变量不会污染全局作用域。 以下是一个例子: (function() {…

    JavaScript 2023年6月11日
    00
  • js 数组 fill() 填充方法

    JS 数组 fill() 填充方法 简介 在 JS 中,fill() 方法可以用来填充数组的某一段区间,即将数组中的所有元素都替换为指定的值。fill() 方法接收三个参数:要填充的值、起始位置和终止位置(不包括终止位置本身)。这个方法具有可变性,即不会创建新的数组,而是直接修改原数组。 语法 arr.fill(value, start, end) valu…

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