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