【java】[文件上傳jar包]commons-fileUpload組件解決文件上傳(文件名)亂碼問題

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(" 出現文件上傳錯誤。 ");
   }
  } html

 

 

 
這幾天,作一個東西須要上傳圖片和視頻,因而就用commons-fileupload作爲上傳組件,寫了個上傳的servlet,可是在實際上傳測試的時候,發現中文的表單值和中文的文件名都是亂碼.
因而上網查了一下,幾位前輩也總結了這個問題,可是具體的狀況不一樣,現把本身遇到這個問題的最後解決方法寫下來,以備後用.  
1.因爲個人頁面是utf-8的編碼,所以寫了個過濾器,對全部的request請求使用utf-8編碼  
2.而後在上傳的servlet中取得request的編碼格式,  tomcat

   String encoding=request.getCharacterEncoding();
3,解決上傳文件的路徑亂碼設置,以下   
   FileItemFactory fif=new DiskFileItemFactory();  
   ServletFileUpload sfu=new ServletFileUpload(fif);  測試

   sfu.setHeaderEncoding(encoding);//這裏是設置編碼的 編碼

4.解決表單域字段的值的亂碼,以下
   item.getString(encoding);
   通過這幾個步驟之後,就能夠解決中文亂碼的問題,至於文中提到的過濾器,
   還有具體的上傳的細節代碼,能夠從tomcat的例子,commons-fileupload的文檔中得到信息.orm

相關文章
相關標籤/搜索