在前后端分离项目中,前端项目获取不到后端项目添加的请求头信息

生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

导读:本篇文章讲解 在前后端分离项目中,前端项目获取不到后端项目添加的请求头信息,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

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

问题场景

在前后端分离项目中 , 后端添加请求头信息,头存放文件下载名称以及日期等信息,在前端执行下载事件时,发现封装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");

在这里插入图片描述

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

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/137101.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!