【发布时间】:2011-02-13 05:13:20
【问题描述】:
我想知道如何根据内容配置从 JSP 页面下载任何文件作为邮件服务器的附件。
我想在 JSP 页面上创建一个链接,通过单击该链接,用户可以从邮件服务器下载文件。该链接应该是内容分发的附件类型。如何在 JSP 中做到这一点?
【问题讨论】:
标签: java jsp attachment
我想知道如何根据内容配置从 JSP 页面下载任何文件作为邮件服务器的附件。
我想在 JSP 页面上创建一个链接,通过单击该链接,用户可以从邮件服务器下载文件。该链接应该是内容分发的附件类型。如何在 JSP 中做到这一点?
【问题讨论】:
标签: java jsp attachment
不要为此使用 JSP,当使用它来流式传输二进制文件时,它会带来麻烦,因为 <% %> 标记之外的所有空格也会被打印到响应中,这只会破坏二进制内容。您需要做的就是在 JSP 中放置一个像 <a href="fileservlet/file.ext"> 这样的 HTML 链接,并使用一个 servlet 类来完成所有的处理和流式传输任务。要设置响应头,只需使用HttpServletResponse#setHeader()。
response.setHeader("Content-Disposition", "attachment;filename=name.ext");
您可以在这里找到一个基本的 servlet 示例,它正是这样做的:FileServlet。
【讨论】:
我建议你把这个问题分解一下。
您知道如何在常规 Java 程序中访问附件吗?如何与邮件服务器等接口?如果您知道这一点,那么通过 jsp 以可下载格式提供附件应该是一个简单的练习。不过,我强烈建议您使用常规 servlet,因为您可能不会过多使用 jsp 周围的额外机制。
只要确保根据下载的内容设置内容类型即可:
在jsp中:<%@page contentType="image/png" %>
在伺服器中:response.setContentType("image/png");
【讨论】:
URL url = new URL("http://localhost:8080/Works/images/abt.jpg");
//for image
response.setContentType("image/jpeg");
response.setHeader("Content-Disposition", "attachment; filename=icon" + ".jpg");
//for pdf
//response.setContentType("application/pdf");
//response.setHeader("Content-Disposition", "attachment; filename=report" + ".pdf");
//for excel sheet
// URL url = new URL("http://localhost:8080/Works/images/address.xls");
//response.setContentType("application/vnd.ms-excel");
//response.setHeader("Content-disposition", "attachment;filename=myExcel.xls");
URLConnection connection = url.openConnection();
InputStream stream = connection.getInputStream();
BufferedOutputStream outs = new BufferedOutputStream(response.getOutputStream());
int len;
byte[] buf = new byte[1024];
while ((len = stream.read(buf)) > 0) {
outs.write(buf, 0, len);
}
outs.close();
【讨论】:
<img src="/Works/images/abt.jpg">?你的方法过于复杂了。