今天做了一个文件上传功能。以前有过多次文件上传经验结果这次确确实实把我难住了。
本次上传借助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);
}
}
这样设置本机会通过,通常情况下不会报错。结果放在linux服务器上结果就出现了中文乱码。起初以为是linux编码格式问题,结果修改linux系统编码EN_US,zh_CN,zh_US试过很多编码格式都不正确,网上也找了很多资料,没解决。判断解决方法思路出错,转向表单提交方式。因为文件上传都会设置FORM表单的ENCTYPE="multipart/form-data"值。调试发现表单提交到后台的时候元素值就已经是乱码了。
参考了一些网上的解决方案:
http://www.360doc.com/content/07/0705/12/12224_595521.shtml
http://www.blogjava.net/duduli/archive/2008/11/11/239845.html等,综合这些牛人们的解决方案,在他们的基础上修改了一些编码,提交测试乱码问题解决。
解决代码如下:
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);
}
}
小弟文笔不过关,小小问题借用了大篇幅或许各位大虾们也没看明白。我的理解就是如果借用第三方包进行文件上传,尽量不要去手动指定编码格式,在不同环境下可能编码格式不一样会出现乱码。直接用获取请求过来的编码格式要好一些。欢迎大家指出其中的不足。
分享到:
相关推荐
开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2...
赠送jar包:commons-fileupload-1.4.jar; 赠送原API文档:commons-fileupload-1.4-javadoc.jar; 赠送源代码:commons-fileupload-1.4-sources.jar; 赠送Maven依赖信息文件:commons-fileupload-1.4.pom; 包含...
赠送jar包:commons-fileupload-1.3.3.jar; 赠送原API文档:commons-fileupload-1.3.3-javadoc.jar; 赠送源代码:commons-fileupload-1.3.3-sources.jar; 赠送Maven依赖信息文件:commons-fileupload-1.3.3.pom;...
commons commons-fileupload历史版本jar包集合,包括src源码 附件列表: commons-fileupload-1.0.zip commons-fileupload-1.1.1.zip commons-fileupload-1.1.zip commons-fileupload-1.2.1-bin.zip commons-...
解决上传文件enctype= multipart/form-data 时无法传递其他参数的问题,以及项目全局编码问题。用的插件是commons io + commons fileupload
commons-lang-2.3.jar,在使用组件实现文件上传时候要注意前后台的一致性,注意在后台定义File文件对象名要与jsp页面中的file标签name名字一致,前台form标签属性一定要设置为enctype="multipart/form-data",而且...
commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-...
commons-fileupload-1.3.3.jar和commons-io-2.6.jar最新版本
commons-fileupload-1.3.1.jar
commons-fileupload-1.4.jar
commons-fileupload-1.3.2.jar和commons-io-2.5.jar
java+servlet+commons-io-2.4.jar+commons-fileupload-1.3.jar实现文件的上传与下载
commons-fileupload-1.3.2jar包和commons-io-2.5jar包,可以到http://commons.apache.org里面下载最新版本。
commons-fileupload-1.3.jar和commons-io-1.2.jar
赠送jar包:commons-fileupload-1.3.3.jar; 赠送原API文档:commons-fileupload-1.3.3-javadoc.jar; 赠送源代码:commons-fileupload-1.3.3-sources.jar; 赠送Maven依赖信息文件:commons-fileupload-1.3.3.pom;...
commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar jar 文件。 commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar 案例上传: http://hi.baidu.com/lichao77821/blog commons-fileupload-1.2.1.jar和commons-...
commons-fileupload-1.2.2.jar是一款可以实现文件上传功能的jar依赖包,一般进行应用开发的朋友会用到这个开发包,下载后放到应用程序的WEB-INF\lib下就可以正常使用了,有从事web开发的朋友不要错过。
commons-fileupload ,commons-io commons-fileupload ,commons-io commons-fileupload ,commons-io
利用servlet实现的commons-fileupload的实例。也就是文件上传实例。
commons-fileupload.rar;包括commons-fileupload-1.3.1-bin和commons-io-2.4两个文件;文件上传接口需要这个包;