fileupload上传中文文件名时乱码问题

昨天让这个乱码问题弄了很久,一大早就开始想要怎么解决才好。
很简单上传页面,jsp上传页面代码
1    <form action="/struts2/UploadServlet" method="post" enctype="multipart/form-data"> 
2        用户名:<input type="text" name="username"><br>
3        密 码:<input type="password" name="password"><br>
4        文件1:<input type="file" name="file1"><br>
5        文件2:<input type="file" name="file2"><br>
6        <input type="submit" value="提交">
7    </form> 
下面是UploadServlet代码
 1@SuppressWarnings("serial")
 2public class UploadServlet extends HttpServlet {
 3
 4    @SuppressWarnings("unchecked""deprecation" })
 5    public void doPost(HttpServletRequest request, HttpServletResponse response)
 6            throws ServletException, IOException {
 7//            设置工厂
 8            DiskFileItemFactory factory = new DiskFileItemFactory();
 9            String path = request.getRealPath("/upload");
10//            设置文件存储位置
11            factory.setRepository(new File(path));
12//            设置大小,如果文件小于设置大小的话,放入内存中,如果大于的话则放入磁盘中
13            factory.setSizeThreshold(1024*1024);
14            
15            ServletFileUpload upload = new ServletFileUpload(factory);
16//            这里就是中文文件名处理的代码,其实只有一行,serheaderencoding就可以了
17            upload.setHeaderEncoding("utf-8");
18            /*String enCoding = request.getCharacterEncoding();
19            if(enCoding != null){
20                upload.setHeaderEncoding(enCoding);
21            }*/

22            
23            try {
24                List<FileItem> list = upload.parseRequest(request);
25                for(FileItem item : list){
26//                    判断是不是上传的文件,如果不是得到值,并设置到request域中
27//                    这里的item.getfieldname是得到上传页面上的input上的name
28                    if(item.isFormField()){
29                        String name = item.getFieldName();
30                        String value =item.getString("utf-8");
31                        System.out.println(name);
32                        System.out.println(value);
33                        request.setAttribute(name, value);
34                    }

35//                    如果是上传的文件,则取出文件名,
36                    else{
37                        String name = item.getFieldName();
38                        String value = item.getName();
39                        System.out.println(name);
40                        System.out.println(value);
41//                        得到不要地址的文件名,不同的浏览器传递的参数不同,有的直接传递文件名,而又的把文件地址一起传递过来
42//                        使用substring方法可以统一得到文件名而不得到文件位置
43                        int start = value.lastIndexOf("\\");
44                        String fileName = value.substring(start + 1);
45                        request.setAttribute(name, fileName);
46//                        写文件到path目录,文件名问filename
47                        item.write(new File(path,fileName));
48                    }

49                }

50            }

51        
52            catch (FileUploadException e) {
53                e.printStackTrace();
54            }
 catch (Exception e) {
55                e.printStackTrace();
56            }

57//            跳转到显示结果页面
58            request.getRequestDispatcher("upload/result2.jsp").forward(request, response);
59    }

60
61}
用EL表达式显示输出
1  <body>
2     用户名:${requestScope.username } <br>
3     密  码:${requestScope.password } <br>
4     文件1 :${requestScope.file1 }<br>
5     文件2 :${requestScope.file2 }<br>
6  </body>

其实很简单的设置就可以把中文件上传,并正确显示正确的中文文件名。
在网上找了一点资料,但是都写得很少,没有把完整的写出来。
所以把它写出来,让大家少走点弯路。

posted on 2008-11-11 12:02 duduli 阅读(31863) 评论(15)  编辑  收藏 所属分类: java

评论

# re: fileupload上传中文文件名时乱码问题 2008-11-11 12:15 低调

serheaderencoding -- set  回复  更多评论   

# re: fileupload上传中文文件名时乱码问题 2008-11-11 12:23 duduli

对。就是setheaderencoding(encoding)低调
  回复  更多评论   

# re: fileupload上传中文文件名时乱码问题 2008-11-11 14:38 lyre

恩,中文的问题,一直都是比较让人困扰的。  回复  更多评论   

# re: fileupload上传中文文件名时乱码问题[未登录] 2011-06-22 11:34 Allen

恩,谢谢了  回复  更多评论   

# re: fileupload上传中文文件名时乱码问题 2012-05-09 13:17 12

我草,还是没有解决我的问题,我用的是SmartUpload上传的。干。  回复  更多评论   

# re: fileupload上传中文文件名时乱码问题 2013-01-17 17:28 8888

终于搞定了,多谢!!!!!!!  回复  更多评论   

# re: fileupload上传中文文件名时乱码问题 2013-03-04 09:34 pass

与struts2结合时 那文件名还是乱码啊!!  回复  更多评论   

# re: fileupload上传中文文件名时乱码问题 2013-04-03 10:36 你儿吃草

我顶起啊!解决了!  回复  更多评论   

# re: fileupload上传中文文件名时乱码问题 2013-04-22 15:01 不明白

我用的是jquery file upload上传文件,乱码还是没有解决啊~知道的请告之~谢谢  回复  更多评论   

# re: fileupload上传中文文件名时乱码问题 2013-07-05 17:25 JL___

天哪好了太感谢了啊  回复  更多评论   

# re: fileupload上传中文文件名时乱码问题[未登录] 2014-04-02 16:23 aa

谢谢  回复  更多评论   

# re: fileupload上传中文文件名时乱码问题 2014-04-30 22:40 一半一半

表示真的可行  回复  更多评论   

# re: fileupload上传中文文件名时乱码问题 2014-09-12 19:00 陌路千里

太感谢楼主了  回复  更多评论   

# re: fileupload上传中文文件名时乱码问题 2015-05-24 15:55 qwqw

太感谢楼主了   回复  更多评论   

# re: fileupload上传中文文件名时乱码问题 2016-06-29 23:03 luguo

太感谢楼主了,一段代码就解决了!  回复  更多评论   


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


网站导航:
 
<2011年6月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

导航

统计

公告

welcome to my place.

常用链接

留言簿(5)

我参与的团队

随笔分类

随笔档案

新闻分类

石头JAVA摆地摊儿

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜

@duduli