java打开/另存为。。。对话框不显示
我的服务器上有一个PDF文件,需要用户从客户端下载
使用Spring框架,我使用javax。servlet。http。HttpServletResponse以创建正确的响应和相应的标头:
response.setHeader("Expires", "-1");
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment;filename="content.pdf");
response.setContentLength(content.size());
然后我使用ServletOutputStream来编写内容:
ServletOutputStream os;
try {
os = response.getOutputStream();
os.write(((ByteArrayOutputStream)baos).toByteArray());
baos.close();
os.flush();
os.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
在客户端,我收到HTTP代码200,并收到正确的响应正文和PDF文件,但“另存为…”弹出窗口没有出现
报头配置中是否存在导致此问题的原因,或者可能是其他原因
谢谢
# 1 楼答案
尝试将内容类型设置为
application/octet-stream
:这将迫使浏览器显示“另存为…”弹出窗口。如果将其设置为
application/pdf
,浏览器将识别文件类型并显示它# 2 楼答案
当我运行这个代码时,问题出现了
用于定义文件名
试试看:
它将打开对话框,并在单击“保存”按钮时为您提供“另存为”选项
# 3 楼答案
也许:
attachment;
空间filename=content.pdf
更新
我看到的唯一区别是标题部分。 你试过没有缓存控制、pragma和expires吗
更新
使用文件或流没有任何区别: