使用流行库
file-save.js ,兼容苹果,火狐,IE,谷歌浏览器;支持500M到1G
npm install ``file-saver --save
代码封装
import Vue from "vue";import { saveAs } from "file-saver";import iconv from 'iconv-lite';//用于解决后端返回的中文乱码问题Vue.prototype.downloadcreateUrl = function(res, filename, type) {const content = res.data;// 注意查看conten的内容数据是否在content.data里let blob = "";let fileName = filename;if(content.type === 'text/xml'){ //返回错误信息提示let reader = new FileReader();reader.readAsText(blob);reader.onload = function () {console.log('reader',reader)let resData = JSON.parse(reader.result.toString());message.warning(resData || '找不到请求的资源' );return;};return ;}if(content.type === 'application/json'){ //返回错误信息提示let reader = new FileReader();reader.readAsText(res);reader.onload = function () {console.log('reader',reader)let resData = JSON.parse(reader.result.toString());SingleMessage.error(resData.message);return;};return ;}if (type == "word") {blob = new Blob([content], {type:"application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=UTF-8"});} else if (type == "reportword") {blob = new Blob([content], {type:"application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=UTF-8"});} else if (type == "zip") {blob = new Blob([content], { type: "application/zip;charset=UTF-8" });} else if (type == "pdf") {blob = new Blob([content], { type: "application/pdf;charset=UTF-8" });} else if (type == "xml") {blob = new Blob([content], { type: "application/xml;charset=UTF-8" });} else if (type == "rar" ||type == "xls" ||type == "xlsx" ||type == "csv" ||type == "dbf") {//没有指定MIME类型,通过文件名后缀定义下载文件类型blob = new Blob([content]);fileName = filename + "." + type;} else if (type == "dbf") {blob = new Blob([content], {type: "application/x-dbf;charset=UTF-8"});} else {//excelblob = new Blob([content], {type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8"});}console.log(content);// 有文件名就用自定义的,没有就从header获取if (!fileName) {fileName = fileNameFromHeader(content.headers["content-disposition"] || "");iconv.skipDecodeWarning = true;//忽略警告fileName = iconv.decode(fileName, 'utf-8');//解决中文乱码}console.log('downloadcreateUrl:',fileName)saveAs(blob, fileName);function fileNameFromHeader(disposition) {let result = null;disposition = disposition.split(";")[1];if (disposition && /filename=.*/gi.test(disposition)) {result = disposition.match(/filename=.*/gi);return decodeURIComponent(result[0].split("=")[1].replace(/\+/g, "%20"));}return "null";}};
