java HttpServletResponse 文件大小超过 8k

标签 java servlets http-headers apache-poi

当文件大小小于8k时,文件名显示正确, 当超过8k时,无法显示,修改文件后缀后,打开文件,数据全部输出。怎么办

response.reset();
OutputStream fileoutStream = response.getOutputStream();
hssfWorkbook.write(fileoutStream);
String filename = new String(wbname.getBytes(), "ISO-8859-1");
resp.setContentType("application/vnd.ms-excel,charset=utf-8");
resp.addHeader("Content-Disposition", "attachment;filename=\""+filename+".xls\"");

enter image description here

最佳答案

您需要在写入OutputStream 之前添加 header 。当文件足够小时,它可以工作,因为输出被缓冲,但从技术上讲,我认为这是一个错误。 HTTP 协议(protocol)要求首先将所有 header 发送到客户端,然后再发送有效负载。一旦有效负载的第一个字节刷新到套接字,您就无法返回并添加 header 。

关于java HttpServletResponse 文件大小超过 8k,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42991812/

相关文章:

java - 使用自定义 ClassLoader 拦截 ClassLoader.getResource(String) 调用

tomcat - 在 web.xml 中定义默认 servlet 时访问静态内容时出现 404 错误

jakarta-ee - Dropwizard 是否支持 Servlet 3 异步 Servlet?

javascript - Javascript/Ajax 中的 HTTP HEAD 请求?

node.js - 在重定向之前设置 Express 响应 header

java - 如何在android中的编辑文本中插入多个图像

java - Java中如何继承多个基类?

java - 使用 servlet 3.1 异步 io 有什么真正的好处?

http - cookie 中的域名

java - Retrofit v2 Call.cancel() 是否删除回调?