gpt4 book ai didi

java - 打开/另存为...对话框未显示

转载 作者:行者123 更新时间:2023-12-01 04:13:04 24 4
gpt4 key购买 nike

我的服务器上有一个 PDF 文件,我需要用户从客户端下载该文件。

使用 Spring 框架,我使用 javax.servlet.http.HttpServletResponse 创建正确的响应和相应的 header :

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 文件,但没有出现“另存为...”弹出窗口。

header 配置是否有任何原因可能导致此问题,或者可能是其他地方?

谢谢。

最佳答案

也许:

附件;空格filename=content.pdf

更新

public static void download(HttpServletResponse response, File file, String downloadName) throws IOException
{
if(file == null) throw new IllegalArgumentException("file is null");

response.reset();
response.setHeader("Content-Length", String.valueOf(file.length()));
response.setContentType(new MimetypesFileTypeMap().getContentType(file));
response.setHeader("Content-Disposition", "attachment; filename=\"" + downloadName + "\"");

InputStream input = new FileInputStream(file);

try
{
OutputStream output = response.getOutputStream();

try
{
IOUtils.copy(input, output);
}
catch(IOException e)
{
e.printStackTrace();

throw e;
}
finally
{
output.close();
}
}
catch(IOException e)
{
throw e;
}
finally
{
input.close();
}
}

我看到的唯一区别是在标题部分。你试过没有缓存控制、编译指示和过期吗?

更新

使用文件或流没有任何区别:

public static void download(HttpServletResponse response, InputStream input, String downloadName, String contenType) throws IOException
{
response.reset();
response.setHeader("Content-Length", String.valueOf(input.available()));
response.setContentType(contenType);
response.setHeader("Content-Disposition", "attachment; filename=\"" + downloadName + "\"");

OutputStream output = response.getOutputStream();
IOUtils.copy(input, output);
input.close();
}

关于java - 打开/另存为...对话框未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19725342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com