gpt4 book ai didi

java - servlet 下载 pdf 时,下载过程不可见

转载 作者:行者123 更新时间:2023-12-04 06:14:43 41 4
gpt4 key购买 nike

我正在使用 content-disposition 下载 pdf 。当我单击下载按钮时,首先下载完整的 pdf 文件,然后浏览器显示保存文件的对话框。我想让浏览器显示下载的过程。以下是我的 servlet 代码:

        String filename = "abc.pdf";
String filepath = "/pdf/" + filename;
resp.setContentType("application/pdf");
resp.addHeader("content-disposition", "attachment; filename=" + filename);

ServletContext ctx = getServletContext();
InputStream is = ctx.getResourceAsStream(filepath);

System.out.println(is.toString());
int read = 0;

byte[] bytes = new byte[1024];

OutputStream os = resp.getOutputStream();
while ((read = is.read(bytes)) != -1) {
os.write(bytes, 0, read);
}
System.out.println(read);

os.flush();
os.close();
}catch(Exception ex){
logger.error("Exception occurred while downloading pdf -- "+ex.getMessage());
System.out.println(ex.getStackTrace());
}

最佳答案

如果客户端事先不知道响应正文的内容长度,则无法确定进度。要让客户端知道内容长度,您需要设置 Content-Length服务器端的头部。

换线

InputStream is = ctx.getResourceAsStream(filepath);


URL resource = ctx.getResource(filepath);
URLConnection connection = resource.openConnection();
response.setContentLength(connection.getContentLength()); // <---
InputStream is = connection.getInputStream();
// ...

无关 对于具体问题,您的异常处理很糟糕。更换线路
System.out.println(ex.getStackTrace());

经过
throw new ServletException(ex);

关于java - servlet 下载 pdf 时,下载过程不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7402911/

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