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