【发布时间】:2011-03-09 03:15:12
【问题描述】:
在 Java/.jsp 中有没有办法设置内容类型等...以便指向 pdf 的链接提示用户保存它,而不是在浏览器的相同或不同窗口中打开它?我已经看到了一些如何在 PHP 中执行此操作的示例,但在 Java 中没有。
不确定编译语言与解释语言是否与我找不到 Java 解决方案的原因有关。 (胡思乱想)
【问题讨论】:
在 Java/.jsp 中有没有办法设置内容类型等...以便指向 pdf 的链接提示用户保存它,而不是在浏览器的相同或不同窗口中打开它?我已经看到了一些如何在 PHP 中执行此操作的示例,但在 Java 中没有。
不确定编译语言与解释语言是否与我找不到 Java 解决方案的原因有关。 (胡思乱想)
【问题讨论】:
您需要设置 Content-Type 和 Content-Disposition 标头。假设response 是一个HttpServletResponse 对象,
String filename = "foo.pdf";
response.setHeader("Content-Type", "application/pdf");
response.setHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
【讨论】:
InputStream input = getClass().getResourceAsStream("downloads/sample.pdf") 之类的东西,但我不能说 PDF 的确切路径是什么,因为我不知道你的目录结构。
如果 PDF 不是由 servlet 自动生成或从外部位置读取,而是仅存在于公共 web 内容中,则只需将Filter 映射到*.pdf 的 URL 模式(或更具体/ generic) 在doFilter() 方法中完成以下工作。
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
String filename = req.getRequestURI().substring(req.getRequestURI().lastIndexOf('/') + 1);
res.setHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
chain.doFilter(request, response);
【讨论】:
你想设置一个Content-disposition 标头
【讨论】: