【问题标题】:How to download attachment file from JSP如何从 JSP 下载附件文件
【发布时间】:2011-02-13 05:13:20
【问题描述】:

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

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

【问题讨论】:

    标签: java jsp attachment


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      我建议你把这个问题分解一下。

      您知道如何在常规 Java 程序中访问附件吗?如何与邮件服务器等接口?如果您知道这一点,那么通过 jsp 以可下载格式提供附件应该是一个简单的练习。不过,我强烈建议您使用常规 servlet,因为您可能不会过多使用 jsp 周围的额外机制。

      只要确保根据下载的内容设置内容类型即可:

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

      在伺服器中:response.setContentType("image/png");

      【讨论】:

        【解决方案3】:
        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">?你的方法过于复杂了。
        猜你喜欢
        • 2022-08-24
        • 2015-09-11
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 2020-01-09
        • 1970-01-01
        • 2010-10-23
        • 1970-01-01
        相关资源
        最近更新 更多