关于commons-fileupload解决(multipart/form-data)参数乱码问题
今天做了一个文件上传功能。以前有过多次文件上传经验结果这次确确实实把我难住了。
本次上传借助commons-fileupload-1.2.1.jar进行上传,本地测试文件上传成功,且并未出现乱码问题(测试过如果不含文件上传的表单能正常提交且正常显示),但发布到服务器上结果表单元素出现了中文乱码问题。
代码如下:
final DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();diskFileItemFactory.setSizeThreshold(this.diskFileSize);{ // 采用系统临时文件目录作为上传的临时目录final File tempfile = new File(System.getProperty("java.io.tmpdir"));diskFileItemFactory.setRepository(tempfile);}final ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory);fileUpload.setSizeMax(1024 * 1024 * 4);//限制文件最大上传数量fileUpload.setHeaderEncoding("UTF-8");try {fileList = fileUpload.parseRequest(request);} catch (final FileUploadException e) {// 存在信息读取问题,返回错误信息e.printStackTrace();super.error.put("信息读取错误问题", "错误信息是:" + e.getMessage());return;}}// 进行String fieldName;this.map = new HashMap<String, Object>();for (final FileItem file : fileList) {if (file.isFormField()) {fieldName = file.getFieldName();try {map.put(fieldName, file.getString());} catch (UnsupportedEncodingException e) {e.printStackTrace();}} else {this.map.put(file.getFieldName(), file);}}final DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();diskFileItemFactory.setSizeThreshold(this.diskFileSize);{ // 采用系统临时文件目录作为上传的临时目录final File tempfile = new File(System.getProperty("java.io.tmpdir"));diskFileItemFactory.setRepository(tempfile);}final ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory);fileUpload.setSizeMax(this.maxSize);fileUpload.setHeaderEncoding(request.getCharacterEncoding());try {fileList = fileUpload.parseRequest(request);} catch (final FileUploadException e) {// 存在信息读取问题,返回错误信息e.printStackTrace();super.error.put("信息读取错误问题", "错误信息是:" + e.getMessage());return;}}// 进行String fieldName;this.map = new HashMap<String, Object>();for (final FileItem file : fileList) {if (file.isFormField()) {fieldName = file.getFieldName();try {map.put(fieldName, file.getString(request.getCharacterEncoding()));} catch (UnsupportedEncodingException e) {e.printStackTrace();}} else {this.map.put(file.getFieldName(), file);}}
2 楼 timer_yin 2012-05-15 我的代码在windows环境下以及linux、solaris都没有问题,但是部署到客户aix环境下,上传中文文件,文件名就乱码,aix机器环境可以手动创建中文名文件及文件夹说明aix环境是支持中文的,问题还是在代码上,我的项目使用的是GBK编码,过滤器也用了GBK,但是aix环境是UTF8的,所以我设置fileUpload.setHeaderEncoding("UTF-8"),windows环境下就乱码了,不知道怎么改了