选择了commons fileupload这个上传组件
但是,不仅有文件名称的中文乱码,还有非文件的表单字段的乱码
So:
//1_创建DiskFiletemFactory对象 设置允许上传文件大小DiskFileItemFactory factory = new DiskFileItemFactory();factory.setSizeThreshold(1024*1024*200);//允许上传文件最大为200M//2_创建ServletFileUpload uploadServletFileUpload upload = new ServletFileUpload(factory);//处理上传文件的路径乱码upload.setHeaderEncoding("UTF-8");//3_因为form表单中设置了enctype="multipart/form-data"属性//所以通过upload解析request,得到集合<FileItem>//FileItem代表什么?工具将请求体中每对分割线中间的内容封装为一个FileItem对象 List<FileItem> list = upload.parseRequest(request);//4_遍历集合for(FileItem item : list) {//然后对获取的FileItem执行如下转码方式//new String(item.getString("UTF-8"));//配合upload.setHeaderEncoding("UTF-8");使用String name = item.getFieldName();//表单名称String value = new String(item.getString("UTF-8"));//表单内容 + 处理乱码}
一、解决上传文件的路径乱码问题:
ServletFileUpload upload = new ServletFileUpload(factory);
//处理上传文件的路径中文乱码
upload.setHeaderEncoding(“UTF-8”);
二、解决表单字段的中文乱码:
new String(item.getString(“UTF-8”));
比如其中一项表单:
String value = new String(item.getString(“UTF-8”));
以此类推。