首页 > csdn导入, 技术 > Java Servlet文件上传解决方案(主要针对中文)

Java Servlet文件上传解决方案(主要针对中文)

以前做动力中心那个网站的时候,由于用户要求要上传图片以及一些文件,所以要一个上传Servlet的组件。最后选中了SmartUpload,至少在Baidu上搜,到处都是。
没想到这才是噩梦的开始。主要问题是在中文文件名上。后来找了很多资料,用了一个迫不得已的最后方法:重新编译SmartUpload,加上中文的解决方法。后来也不知道怎么也就OK了。
前几个月动力中心的硬盘挂了,数据全丢了。不巧,我这里也没有备份,工作室的备份也丢了。没有办法,只好从一个旧的版本改起。其实中文开发的问题还是很多的,即使在Windows下好好的,到Linux下也会出各种各样的问题(比如Locale是en_US.UTF8)等等。
再也恢复不起来原来的办法了。后来也是在网上找到的资料,说是可以用Commons里的FileUpload. Jakarta Commons名气挺大的,我一起想学学,却一直忘,也不知道该怎么用(以前只听过BeanUtils, 用来注入一个bean的)。
马上从Apache下了一个来试试。注意,要用起来FileUpload,还要下一个Commons IO。里面对国际化的支持还是不错的,至少我用item.getName()出来的居然就有中文。
但保存文件还是遇到了问题。为了对国际化的良好支持,要达到以下几点:在页面显示的文件名要是中文的,下载的时候保存的文件名也要是中文的,同时文件要保存在一个目录下。
在做链接生成的时候,我发现浏览器会把链接中的中文自动encode成UTF-8的URL表示(就是%20%30那种)。没错,文件保存也可以用这个名字,这样在不支持中文路径的linux上也可以保存中文文件名了。然后我自己写了一个下载的Servlet,用于从本地读取文件内容,并写入response.getWriter()里。这样的话文件名自动就成中文了。至于重名问题,我的链接是这么写的: http://www.test.com/download/1892649237492/%8D%82.txt 结果文件名会自动转成中文的(IE6, FF1.5通过)。但是实际的文件名是1892649237492%8D%82.txt,就是没有了”/”,这一点,在Download Servlet里解析。同时DownloadServlet里加了一些逻辑,保护系统的安全。

分类: csdn导入, 技术 标签: ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word


Warning: fsockopen() has been disabled for security reasons in /home/onlymars/public_html/wp/wp-includes/class-snoopy.php on line 1142