fetch 下载流文件

前后端分离的项目,前端大部分使用fetch调用接口,遇到下载的时候,服务器接口一般直接返回流文件(链接本身就是一个文件)

export const getExport = async (url, postData) => {
    let options = null
    if (postData) {
        options = _headerOptions('POST')
        options.headers['content-type'] = 'application/json'
        options.body = JSON.stringify(postData)
    } else {
        options = _headerOptions('GET')
    }

    let response = await fetch(config.apiHost + url, options)
    response.blob().then((blob) => {
        const a = window.document.createElement('a');
        const downUrl = window.URL.createObjectURL(blob);// 获取 blob 本地文件连接 (blob 为纯二进制对象,不能够直接保存到磁盘上)
        const m = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/.exec(response.headers.get('Content-Disposition'));
        const filename = m[1].replace(/['"]/g, '');
        // console.log(decodeURI(escape(filename[0])))
        a.href = downUrl;
        a.download = filename;
        a.click();
        window.URL.revokeObjectURL(downUrl);
    });

    return [];
}
此条目发表在js, 前端分类目录。将固定链接加入收藏夹。