当前位置:  开发笔记 > 编程语言 > 正文

Firefox在Struts应用程序中剪切名称包含空格的文件

如何解决《Firefox在Struts应用程序中剪切名称包含空格的文件》经验,为你挑选了1个好方法。

我正在使用下一个类(为了便于理解而简化)在struts web应用程序中下载图像.它在每个浏览器中运行良好,但firefox,它切割包含空格的名称.这就是说:带有spaces.pdf的文件在firefox中下载为:file,而在chrome中,IE7 IE6作为文件下载到spaces.pdf.

public class Download extends Action {
    private static final int BUFFER_SIZE = 4096;    

    public ActionForward execute(ActionMapping mapping,
        ActionForm     form,
        HttpServletRequest request,
        HttpServletResponse response) throws Exception {
        String filename = "file with spaces.pdf";
        File file =  ... // variable containing the file;
        response.setStatus(HttpServletResponse.SC_OK);
        response.setContentType(getMimeType(request, file));
        response.setHeader("Content-Type", getMimeType(request, file));
        response.setHeader("Content-Disposition","attachment; filename="+ filename);
        InputStream is = new FileInputStream(file); 
        sendFile(is, response);
        return null;
   }  

   protected String getMimeType(HttpServletRequest request, File file) {
        ServletContext application = super.servlet.getServletContext();
        return application.getMimeType(file.getName());
   }

   protected void sendFile(InputStream is, HttpServletResponse response) throws IOException {
       BufferedInputStream in = null;
       try {
            int count;
            byte[] buffer = new byte[BUFFER_SIZE];
            in = new BufferedInputStream(is);
            ServletOutputStream out = response.getOutputStream();
            while(-1 != (count = in.read(buffer)))
                out.write(buffer, 0, count);
            out.flush();            
       } catch (IOException ioe) { 
            System.err.println("IOException in Download::sendFile"); 
            ioe.printStackTrace();
       } finally {
            if (in != null) {
                try { 
                   in.close(); 
                } catch (IOException ioe) { ioe.printStackTrace(); }
            }   
       }
    }
}

有谁知道这里发生了什么?注意我在Windows Vista下使用firefox 3.0.3.



1> Stephen Denn..:

文件名应该是带引号的字符串.(根据RFC 2616的第19.5.1节)

response.setHeader("Content-Disposition","attachment; filename=\"" + filename + "\"");

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有