2011-11-04 75 views
7

下面的Java代码被用于下载throgh Web应用程序所请求的日志文件:空的空间,同时下载文件

protected HttpServletResponse response; 
.... 

    response.setContentType("application/octet-stream"); 
    String filename = OrgName + ".log"; 
    response.setHeader("Content-Disposition", "attachment; filename= " + filename); 
    OutputStream os = response.getOutputStream(); 
    os.write(getFile()); 
    os.close(); 

问题是当OrgName包含了诸如“XYZ私人有限公司”的空间,在这个案例文件将以名称“Xyz”而不是“Xyz Pvt Ltd.log”下载。第一个空格之后的名称部分被忽略。请注意,该文件正确下载,它只是没有正确显示的名称。有什么我做错了吗?或者它是一种标准行为?

环境:的Struts 2时,JBoss 5.1.0,Mozilla Firefox浏览器3.5.3

+0

我认为是依赖于浏览器。刚刚在IE(8.0)Chrome中试过,它工作。 – Santosh

回答

13

我想我找到了你的问题。只需将文件名称字符串设置为引用

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

这应该可以解决您的问题。

+0

是的,它工作。非常感谢 :) –

0

我认为你将不得不使用的空间编码你可以看看阿帕奇的base64编码器,我记得空间得到编码到%20%,因此在解码时你将能够用空格检索文件名。

+0

如果你这样做,它将占据%20%作为文件名本身的一部分,并不会将其显示为空格字符。 – Santosh