现在的位置: 首页 > 综合 > 正文

下载的文件名不要含汉字

2013年10月02日 ⁄ 综合 ⁄ 共 1365字 ⁄ 字号 评论关闭

在开发河南气象局小区短信时,有一个关于下载的问题耗费了我一下午的时间。最终把问题原因找到了,也能够让系统将就运行,但是问题真正的解决办法还没有找到。下面,我将这个问题的发现和解决过程详细描述下来,以免自己日后遗忘。

在小区短信的下载界面,我给用户提供了下载的功能,由于记录数量巨大,所以我只允许用户下载到本地,并且下载格式为文本文件。之前在开发客户稳定度模型时,我曾经做过下载为文本的功能,当时一点问题都没有。这次,我也觉得只要把原来的代码拷贝下来,就可以正常运行了。

事实正如所料。我把客户稳定度模型中的代码拷贝到小区短信系统里面,并且适当修改了部分代码(如生成文件名等),下载过程一切正常。但是,当我把开发好的小区短信系统部署到Web服务器上之后,就无法下载了。点击下载按钮之后,弹出来安全提示窗口,上面显示的文件名为该页面的名称,根本不是我在程序中设计的动态生成的名字。

这是为什么呢?在开发环境下,下载没有一点问题;到了运行环境,就无法下载;可是同样的代码在另外一个系统(客户稳定度系统)就可以正常下载;是不是需要设置IE浏览器的安全性呢?我上网搜了IE安全性的设置,总觉的不应该。客户稳定度和小区短信系统处于同一个Web服务器,代码稍有区别,为什么客户稳定度可以正常下载,而小区短信系统无法正常下载呢?于是,我开始逐一比较两个系统下载部分的代码的差异。我发现,客户稳定度系统采用的是SQL语句从数据库查询,而小区短信采用的是存储过程从数据库查询,难道是查询方式的差异导致了下载的异常?我把小区短信改为采用SQL语句的方式查询下载。经过验证,我的猜测是错误的。因为我把小区短信采用SQL语句的方式后,依然无法正常下载。

继续比较代码,两个系统都采用动态生成文件名的方式,以此让客户更方便。会不会是动态生成文件名部分出错了?我把动态文件名改成了静态文件名“zhouyonghui.txt”。测试以后,居然可以正常下载了。由此可以推断,下载错误应该出现在文件名上。难道Web服务器不支持动态生成的文件名?不可能啊,因为客户稳定度系统也是动态生成的文件名呀!但面对事实,我也只好暂时使用静态文件名。

后来我无意间把静态名由“zhouyonghui.txt”改成“已发送.txt”,因为我还是想让客户方便点,毕竟对客户来说“已发送.txt”比“zhouyonghui.txt”要有意义的多。可是改完以后又无法正常下载了。经过比较,我恍然大悟了:下载的时候,文件名不支持汉字。如果用汉字,就无法正常下载。我查看客户稳定度系统,它之所以能够正常下载,主要是因为它动态产生的文件名是“yyyymmddhh24miss”的格式,里面根本就没有汉语。而在小区短信系统里,我为了方便客户把文件名动态生成为“已发送”、“ 已取消”等,全是汉字,所以就无法正常下载了。

那为什么文件名同样是汉字,当用我的机器做Web服务器时就可以正常下载呢?难道我的机器和服务器有什么不同的地方吗?到目前为止,我还没有查明我的机器和服务器究竟差异在哪儿。

至于为什么不允许下载的文件名为汉字,我还没有搞清楚。但是,经过一个下午的不断试验,我得出的最终结论是:尽量不要使用汉字作为下载文件的文件名,否则无法正常下载。这个错误虽小,但是比较隐蔽,不容易发现,所以耗费了自己很长时间。

抱歉!评论已关闭.