解决response.setHeader设置下载文件名无效的问题

网友投稿 401 2022-11-03

解决response.setHeader设置下载文件名无效的问题

目录response.setHeader设置下载文件名无效解决response.setheader无效的原因之一原因是输出缓冲区

response.setHeader设置下载文件名无效

response.setContentType("application/octet-stream");

response.setHeader("Content-Disposition", "attachment; filename=down.xls");

设置后,点击下载的文件名无效,是方法的名字

解决

将以上的代码放到流的前面即可。

response.setheader无效的原因之一

最近搭建架构的时候,使用了HandlerInterceptorAdapter,

在afterCompletion 或 postHandle中使用了response.setHeader("token", token);

初衷是想在方法执行完成后,把新的jwt令牌返回给调用方。

但是实际返回中获取不到set的值。

原因是

response的hePpJPjhYUiJader设置,要在缓冲区装入响应内容之前,http的协议是按照响应状态行、各响应头和响应正文的顺序输出的,后写的header就不生效了。所以在preHandle里写header就可以生效了的。

输出缓冲区

1、Servlet程序输出的HTTP消息的响应正文首先被写入到Servlet引擎提供的一个输出缓冲区中,直到输出缓冲区被填满或者Servlet程序已经写入了所有的响应内容,缓冲区中的内容才会被Servlet引擎发送到客户端。

2、使用输出缓冲区后,Servlet引擎就可以将响应状态行、各响应头和响应正文严格按照HTTP消息的位置顺序进行调整后再输出到客户端。

3、如果在提交响应到客http://户端时,输出缓冲区中已经装入了所有的响应内容,Servlet引擎将计算响应正文部分的大小并自动设置Content-Length头字段。

4、如果在提交响应到客户端时,输出缓冲区中装入的内容只是全部响应内容的一部分, Servlet引擎将使用HTTP 1.1的chunked编码方式(通过设置Transfer-Encoding头字段来指定)传输响应内容。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:C++第8周(春)项目3 分数类中的运算符重载
下一篇:如何在 K3s 中启用 Traefik Dashborad
相关文章

 发表评论

暂时没有评论,来抢沙发吧~