save_as.js(@/utils/save_as)
/** * @description 導(dǎo)出文件 * @param {Blob} blob * @param {String} filename */ export default function saveAs (blob, filename) { let type = blob.type; let force_saveable_type = 'application/octet-stream'; if (type && type != force_saveable_type) { // 強(qiáng)制下載,而非在瀏覽器中打開 let slice = blob.slice || blob.webkitSlice; blob = slice.call(blob, 0, blob.size, force_saveable_type); } let url = URL.createObjectURL(blob); let link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a'); link.href = url; link.download = filename; let event = document.createEvent('MouseEvents'); event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); link.dispatchEvent(event); URL.revokeObjectURL(url); link = null; }
export_file.js(@/mixins/export_file)
import saveAs from '@/utils/save_as'; export default { methods: { exportFile (opts) { let uri = opts.uri; if (!uri) { return Promise.reject(new Error('缺少uri')); } let reqData = opts.data || {}; return this.$http.post(uri, reqData, { responseType: 'blob' }) .then(res => { let blob = res.data; if (blob.type == 'application/json') { return new Promise((_, reject) => { let reader = new FileReader(); reader.onload = function (e) { let data = JSON.parse(e.target.result); reject(new Error(data.msg)); } reader.readAsText(blob); }) } let reg = /filename\="([^"]+)"/; let dis = res.headers['content-disposition']; if (!dis || !reg.test(dis)) { return Promise.reject(new Error('導(dǎo)出失敗')); } let filename = decodeURIComponent(RegExp.$1); saveAs(blob, filename); }) } } }
使用:
import ExportFile from '@/mixins/export_file';
mixins:[ExportFile],
let opts = { uri: `url`, data: this.searchObj }; this.exportFile(opts) .catch(e => this.$message.error(e.message)) .then(_ => this.loading = false);
聲明:所有內(nèi)容來自互聯(lián)網(wǎng)搜索結(jié)果,不保證100%準(zhǔn)確性,僅供參考。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。