GWT / Apache POI下载Servlet:下载时文件名不正确

时间:2013-12-04 19:13:51

标签: java excel tomcat gwt servlets

我有一个使用Apache POI创建动态Excel电子表格的servlet。我可以很好地创建电子表格。但是,当我使用Google ChromeTomcat服务器时,下载的文件不会反映正确的文件名。相反,它将文件名替换为servlet的名称。因此,例如,我想下载一个文件“dr_3.xlsx”,它会下载一个名为“excelService”的文件(servlet的名称)。所有内容都是正确的,只是文件名错误。

只有在Tomcat服务器上使用Google Chrome时才会出现此错误。使用Firefox + TomcatChrome + JettyFirefox + JettyIE(eww) + Tomcat时,它会按预期执行。

这是doGet()方法的代码:

protected void doGet( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException
    {
        int id = Integer.parseInt(req.getParameter("id"));
        int BUFFER = 1024 * 100;
        resp.setContentType( "application/octet-stream" );
        resp.setHeader( "Content-Disposition:", String.format("attachment; filename=\"%s\"", "dr_" + id + ".xlsx"));
        OutputStream outputStream = resp.getOutputStream();
        byte[] bytes = buildFile(id);
        resp.setContentLength(bytes.length);
        resp.setBufferSize( BUFFER );
        outputStream.write(bytes);
        outputStream.close();
    }

重申:Excel文件没问题。该文件的名称不正确。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

感谢Fedy2,删除了"Content-Disposition"中的冒号。

答案 1 :(得分:0)

尝试不加引号:

resp.setHeader( "Content-Disposition:", String.format("attachment; filename=%s", "dr_" + id + ".xlsx"));

另外,请查看this SO讨论。