美文网首页
fileDownload

fileDownload

作者: 家有饿犬和聋猫 | 来源:发表于2020-11-19 16:15 被阅读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);
}

相关文章

网友评论

      本文标题:fileDownload

      本文链接:https://www.haomeiwen.com/subject/bblliktx.html