2021-09-01

文件上传过程中响应的处理

响应头设置Content-Disposition属性

后端再处理好文件流时需要写入响应response的输入流中:
// 读取excel模板
ExcelWorkbook workbook = loadExcelTemplate(filePath);
OutputStream output = response.getOutputStream();
…模板文件处理
workbook.write(output);
output.flush();
workbook.close();
此时flush是是否立即输出流指定的html,是响应已经或者准备提交了,如果在这段代码之后,还有其他代码试图改写header,比如调用response.setHeader,就改不了
response.setHeader(“Content-Disposition”, "attachment; filename= “某.xls”);
前端获取的响应中无此属性在这里插入图片描述
那么前端react在处理文件流时:
onClick={() => {
fetch(downloadFiles, { //downloadFiles 接口请求地址
method: ‘get’,
credentials: ‘include’,
headers: new Headers({
‘Content-Type’: ‘application/json’,
‘X-Auth-Token’: User.getToken(),//设置header 获取token
})
}).then((response) => {
return response.blob().then(function (blob) {
var a = window.document.createElement(‘a’);
var downUrl = window.URL.createObjectURL(blob);
var filename = (0, _contentDisposition.parse)(response.headers.get(‘Content-Disposition’)).parameters.filename;
a.href = downUrl;
a.download = decodeURI(filename);
a.click();
window.URL.revokeObjectURL(downUrl);
return {
code: 0,
messageKey: ‘Start downloading’
};
});

}).catch((error) => {
console.log(‘文件下载失败’, error);
});
}}

获取不到属性Content-Disposition ,就下载不了,所以后端接口代码对于response的处理要flush提交的,把setHeader操作的代码写到这个上面去

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值