fileDownload
2020-11-19 本文已影响0人
家有饿犬和聋猫
/**
* 方法下载
* @param url
* @param opt 配置项
* @returns {Promise<any>}
*/
function fetchDownload(url, opt) {
let promise = new Promise((resolve) => {
fetch(url, opt).then(res => res.blob().then(blob => {
let a = document.createElement('a');
let url = window.URL.createObjectURL(blob); // 获取 blob 本地文件连接 (blob 为纯二进制对象,不能够直接保存到磁盘上)
let filename = window.decodeURI(res.headers.get('Content-Disposition').split('=')[1]); // 获取文件名并处理文件名编码问题
filename = filename.replace('utf-8\'zh_cn\'', '');
a.href = url;
a.download = filename;
a.click();
window.URL.revokeObjectURL(url);
}).then(() => {
resolve();
}));
});
return promise;
}
/**
* 文件下载
* @param {string} urlStr 请求地址
* @param {object} params 请求参数 如{name: '123'}
* @param {object} type 请求类型 如'get','post'
* @returns {Promise}
*/
export function fileDownload(urlStr, params, type = 'get') {
let qs = require('qs');
type = type.toLocaleLowerCase();
// 如果是dev则加入代理
if (__DEV__) {
urlStr = '/proxy' + urlStr;
}
let opt = {
method: type
};
if (type === 'get') {
urlStr += '?';
urlStr += qs.stringify(params);
} else if (type === 'post') {
opt.body = JSON.stringify(params);
opt.headers = {
'Content-Type': 'application/json'
};
}
return fetchDownload(urlStr, opt);
}