前端获取不到后端添加的请求头信息

前端获取不到后端添加的请求头信息

问题场景

在前后端分离项目中 , 后端添加请求头信息,头存放文件下载名称以及日期等信息,在前端执行下载事件时,发现封装Download.js报错,原因在于头content-disposition获取失败。

发现问题

后端设置请求头信息:

response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");

在这里插入图片描述

前端下载事件
                <a-button icon="export" :loading="exporting" @click="() => {
                    this.exporting = true;
                    Download(this.axios.get(this.$Api.*.*.exportCostFinance, {
                        responseType: 'arraybuffer',
                        params: {
                            company: this.form.company === 0 ? 0 : this.form.company || -1,
                            department: this.form.department || 0,
                            branchOffice: this.form.branchOffice || 0,
                            startMonth: this.form.startMonth && this.form.startMonth.format('YYYY/MM/01') || '',
                            endMonth: this.form.endMonth && this.form.endMonth.endOf('month').format('YYYY/MM/DD') || '',
                        }
                    })).finally(() => this.exporting = false);
                }">导出</a-button>
封装Download.js
function Download(request) {
    return new Promise((resolve, reject) => {
        request.then(res => {
            console.log(res)
            let filename = res.headers['content-disposition'].replace('attachment;filename=', '');
            let conentType = res.headers['content-type'];
            const blob = new Blob([res.data], {type: conentType});
            if (typeof window.navigator.msSaveBlob !== 'undefined') {
                // 兼容IE,window.navigator.msSaveBlob:以本地方式保存文件
                window.navigator.msSaveBlob(blob, decodeURI(filename))
            } else {
                // 创建新的URL并指向File对象或者Blob对象的地址
                const blobURL = window.URL.createObjectURL(blob)
                // 创建a标签,用于跳转至下载链接
                const tempLink = document.createElement('a')
                tempLink.style.display = 'none'
                tempLink.href = blobURL
                tempLink.setAttribute('download', decodeURI(filename))
                // 兼容:某些浏览器不支持HTML5的download属性
                if (typeof tempLink.download === 'undefined') {
                    tempLink.setAttribute('target', '_blank')
                }
                // 挂载a标签
                document.body.appendChild(tempLink)
                tempLink.click()
                document.body.removeChild(tempLink)
                // 释放blob URL地址
                window.URL.revokeObjectURL(blobURL)
            }
            resolve(res);
        }).catch(res => {
            reject(res);
        });
    });
}

export {
    Download
}
点击下载事件,content-disposition头信息实际上没有,Download.js报错,下载失败。

在这里插入图片描述

解决问题

 response.addHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
 
 response.setHeader("Access-Control-Expose-Headers","Content-Disposition");

在这里插入图片描述

重启项目,再次点击下载事件,下载成功。

在这里插入图片描述

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页