选择了commons fileupload这个上传组件
但是,不仅有文件名称的中文乱码,还有非文件的表单字段的乱码
So:
//1_创建DiskFiletemFactory对象 设置允许上传文件大小
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024*1024*200);//允许上传文件最大为200M
//2_创建ServletFileUpload upload
ServletFileUpload 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”));
以此类推。