成都心情

  BlogJava :: 首页 ::  :: 联系 :: 聚合  :: 管理 ::
  98 随笔 :: 2 文章 :: 501 评论 :: 1 Trackbacks

人们常说:做开发就像做那个什么,要满足客户的各种要求 ... ... 这句话一直记忆深刻,不过可能我运气太好,遇到的客户要求不多都能满足,至少不会故意用些边界条件来搞点花花出来。

而我现在遇到的问题是,测试想尽办法用边界条件来测这些程序,这是他们的责任,有时真的被搞得焦头烂额。比如界面上有个文档要下载成 xml 格式,本来没什么麻烦的,但是这个文件名一旦包含些花花绿绿的符号就不好弄了,参看下图。

                       0903251.JPG

这真是让人哭笑不得,分号以后的花花符号不见了,扩展名也不见了。再来一个,看下图。

                    0903252.JPG

这个更牛,分号后面的字全部不见了,竟然下载文件名是 *.jsp ,我哭了,我怒了。不过没法,明显是自己的代码没考虑到这些符号花花,没进行边界条件测试,垂头丧气之后,还是得改。据我分析,应该是在下载的时候分号起到了分割属性的作用,例如 response.setContentType("application/x-msdownload; charset=UTF-8"); 中的分号设定了 ContentType 的字符集。那么按照常理,应该把文件名中的分号进行转义,比如 XML 中对 < 符号的转义,分号的转义实体编号是 ; ,经过实验,转义以后还是无法识别,文件名成了 _59 。实在没法, google 以后找到了如何在 PHP 下载文件名中解决乱码这篇文章,在这里,作者明确指出了应该对文件名进行 URL 编码,在经过一番折腾后,修改后的代码如下:


String clinet  =  request.getHeader("User-Agent");
        
if (clinet.indexOf("MSIE") > 0){
            flowName 
=  "attachment; filename=\"" +java.net.URLEncoder.encode(fileName, "utf-8")+ ".xml\"";
        }
else {
            flowName 
=  "attachment; filename*=\"utf8''" +java.net.URLEncoder.encode(fileName, "utf-8")+ ".xml\"";
        }
        String content 
=   " xml格式内容. " ;
        response.setContentType(
"application/x-msdownload; charset=UTF-8");
        response.setHeader(
"Content-Disposition" ,flowName);
        out.print(content);

这样就可以正常下载带花花符号的文件名了。令人感慨的是,为了这些花花符号,我不得不去写代码分析浏览器的类型,在这里我很粗旷的支持了两种浏览器, IE FF ,如果是其他类型的浏览器,统一按 FF 处理,至于为何这样写,可以参考上面提供的文章。这里有两个疑问: 1. 花了很长时间来找 RFC 关于 Content-Disposition 设置的描述,没发现明确要求用 URL 进行编码(现在看来我觉得切入点找错了,应该从 ' 下载过程本身就是一个 URL 请求 ' 切入,参考 http://www.blooberry.com/indexdot/html/topics/urlencoding.htm ); 2.attachment; filename*=utf8'' 这里为何要这样设置,我在 FF KB 里面也没找到,不知道那篇文章的作者是如何发现的,人才啊。



请注意!引用、转贴本文应注明原作者:Rosen Jiang 以及出处: http://www.blogjava.net/rosen

posted on 2009-03-25 16:16 Rosen 阅读(3551) 评论(3)  编辑  收藏 所属分类: Java EE 表现层及容器

评论

# re: 恶战怪异文件名下载[未登录] 2009-03-25 16:44 竹十一
即使你转义了,但这些烂符号是OS合法的文件名吗?


btw: 你被各种风格的SM无情的SM了无数遍。。。
  回复  更多评论
  

# re: 恶战怪异文件名下载 2009-09-29 00:51 盗泉
这种转义没有实用价值,文件名稍为长一点就被截断  回复  更多评论
  

# re: 恶战怪异文件名下载 2009-10-09 10:10 Rosen
@竹十一
@盗泉
so,这是一种无奈的处理方式,如果一定要限制,得从需求抓起。  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: