弹指一挥间

好好做事,学习待人 (大数据分析/.NET/JAVA)技术交流QQ:860280456; .NET/JAVA技术交流群:192028174

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

response.setContentType("text/html; charset=UTF-8");
  Boolean isMultipart = ServletFileUpload.isMultipartContent(request);
  PrintWriter out = response.getWriter();
  if (isMultipart) {
   FileItemFactory fileItemFactory = new DiskFileItemFactory();
   ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
servletFileUpload.setHeaderEncoding("UTF-8");//解决http报头乱码,即中文文件名乱码
   try {
    List<FileItem> list = servletFileUpload.parseRequest(request);
    for (Iterator<FileItem> iter = list.iterator(); iter.hasNext();) {
     FileItem item = iter.next();
     if (item.isFormField()) {
       out.println(item.getFieldName());
       out.println("<br/>");
       out.println("<br/>");
       out.println(item.getString("UTF-8")); //解决表单输入输乱码
     }
     else{
      out.println(item.getFieldName());
      out.println(item.getName());
     }
    }
   } catch (Exception e) {
    //throw new BusinessException(" 出现文件上传错误。 ");
    System.out.println(" 出现文件上传错误。 ");
   }
  }

 

 

 
这几天,做一个东西需要上传图片和视频,于是就用commons-fileupload做为上传组件,写了个上传的servlet,但是在实际上传测试的时候,发现中文的表单值和中文的文件名都是乱码.
于是上网查了一下,几位前辈也总结了这个问题,但是具体的情况不同,现把自己遇到这个问题的最后解决方法写下来,以备后用.  
1.由于我的页面是utf-8的编码,因此写了个过滤器,对所有的request请求使用utf-8编码  
2.然后在上传的servlet中取得request的编码格式, 

   String encoding=request.getCharacterEncoding();
3,解决上传文件的路径乱码设置,如下   
   FileItemFactory fif=new DiskFileItemFactory();  
   ServletFileUpload sfu=new ServletFileUpload(fif); 

   sfu.setHeaderEncoding(encoding);//这里是设置编码的

4.解决表单域字段的值的乱码,如下
   item.getString(encoding);
   经过这几个步骤以后,就可以解决中文乱码的问题,至于文中提到的过滤器,
   还有具体的上传的细节代码,可以从tomcat的例子,commons-fileupload的文档中获得信息.

posted on 2017-02-17 00:39  v.e.n.u.s  阅读(680)  评论(0编辑  收藏  举报