后端返回文件流 前端处理方法
下载功能
一般后端会返回文件流的形式
前端会收到一堆乱码
前端需要对乱码进行转译 成正常的
可以先创建一个公共的方法文件,这样就可以在项目的任何地方使用
utils.js
import { getToken } from '@/common/utils/common/auth';
import axios from 'axios';
import { getLocalItem, Constants } from '@/common/utils/common/cache';
export function $fileDownload(url, config = {}) {
let downloadUrl = process.env.VUE_APP_LIMS + url;
let method = config.method || 'get';
axios
.request({
url: downloadUrl,
method: method,
headers: {
Authorization: getToken(),
'Content-Type': 'application/json',
'User-Lang': getLocalItem(Constants.LOCALE)
},
data: config.data,
responseType: 'blob'
})
.then(
response => {
console.log(response)
let filename = response.headers['content-disposition']; // 取出文件名字
console.log(filename)
if (filename) {
let index = filename.indexOf('fileName=');
console.log(index)
if (index >= 0) {
console.log(index)
filename = filename.substr(index + 9);
filename = decodeURI(filename);
}
console.log(index)
filename = filename.substr(index + 21);
filename = decodeURI(filename);
}
let fileDownload = require('js-file-download');
fileDownload(response.data, filename);
if (typeof config.resolve === 'function') {
config.resolve();
}
},
error => {
let hasError = true;
if (error.response) {
const status = error.response.status;
if (status === 401) {
hasError = false;
}
}
if (hasError) {
this.$showError('下载出错,请稍后再试');
}
if (typeof config.reject === 'function') {
config.reject();
}
}
);
}
页面使用
import { $fileDownload } from "@/modules/lims/utils/utils";
async tipsZPGCalendar() { // let data = { // startDate: this.startDate, // endDate: this.endDate, // } // let config = { // data: data, // resolve: () => { // }, // reject: () => { // }, // }; let url = '/capitalPlan/reportSearchZPGCalendar?startDate=' + this.startDate + '&endDate=' + this.endDate const hh = await $fileDownload(url) },
handleClick() { let str = `参拍日期,项目名称\n`; for (let i = 0; i < this.list.length; i++) { let landProjects = []; for (let j = 0; j < this.list[i].landProjects.length; j++) { landProjects.push(this.list[i].landProjects[j]["projectName"]); } landProjects.join(","); str += `${this.list[i]["dateStr"]},${landProjects}`; str += "\n"; } //encodeURIComponent解决中文乱码 let uri = "data:text/csv;charset=utf-8,\ufeff" + encodeURIComponent(str); //通过创建a标签实现 let link = document.createElement("a"); link.href = uri; //对下载的文件命名 link.download = `参拍日历数据表${this.year}-${this.month}.xls`; document.body.appendChild(link); link.click(); document.body.removeChild(link); },

浙公网安备 33010602011771号