如何从JSP下载附件文件

时间:2010-04-28 06:57:17

标签: java jsp attachment

我想知道如何从邮件服务器中根据内容处置作为附件从JSP页面下载任何文件。

我想在JSP页面上创建一个链接,通过点击该链接,用户可以从邮件服务器下载文件。链接应该是内容处置的附件类型。我怎么能在JSP中做到这一点?

3 个答案:

答案 0 :(得分:4)

不要使用JSP,这是使用它来传输二进制文件时的麻烦,因为<% %>标记之外的所有空格都将打印到响应中,这只会破坏二进制内容。您需要做的就是在JSP中放置一个像<a href="fileservlet/file.ext">这样的HTML链接,并使用servlet类来完成所有处理和流式处理任务。要设置响应标头,只需使用HttpServletResponse#setHeader()

response.setHeader("Content-Disposition", "attachment;filename=name.ext");

你可以在这里找到一个基本的servlet示例,它正是这样做的:FileServlet

答案 1 :(得分:0)

我建议你稍微解决这个问题。

您是否知道如何从常规Java程序中访问附件?如何与邮件服务器等接口?如果您知道,通过jsp以可下载的格式提供附件应该是一项简单的练习。虽然,我强烈建议你做一个常规的servlet,因为你可能没有太多使用jsp周围的额外机制。

只需确保根据下载内容设置内容类型:

在jsp中:<%@page contentType="image/png" %>

在servelt中:response.setContentType("image/png");

答案 2 :(得分:0)

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();