中文文件名上传乱码

原文:http://www.blogjava.net/duduli/archive/2008/11/11/239845.html

昨天让这个乱码问题弄了很久,一大早就开始想要怎么解决才好。

很简单上传页面,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")
 2 public  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 >

其实很简单的设置就可以把中文件上传,并正确显示正确的中文文件名。
在网上找了一点资料,但是都写得很少,没有把完整的写出来。
所以把它写出来,让大家少走点弯路。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值