`
jordan_micle
  • 浏览: 240262 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

利用fileupload进行上传文件

阅读更多

需引入两个jar包:commons-fileupload-1.2.jar和commons-io-1.3.2.jar

以表单提交到servlet中处理为例。


包含文件域的form为:

enctype="multipart/form-data"


STEP1:

实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload

DiskFileItemFactory factory = new DiskFileItemFactory();


STEP2:

设置上传文件时用于临时存放文件的内存大小(例如4K),多于的部分将临时存在硬盘

factory.setSizeThreshold(4 * 1024);


STEP3:

设置存放临时文件的目录


factory.setRepository(new File(临时文件目录的绝对路径));


STEP4:

用以上工厂实例化上传组件

ServletFileUpload upload = new ServletFileUpload(factory);


STEP5:

设置最大上传尺寸,如果10M

upload.setSizeMax(10 * 1024 * 1024);


然后,从request得到所有上传域的列表

List<?> fileItemList = upload.parseRequest(request);

得到所有上传的文件


Iterator<?> fileItemIt  = fileItemList .iterator();



循环处理所有文件

while (fileItemIt.hasNext()) {

    FileItem fileItem = (FileItem) fileItr.next();

    fileItem:

    1. 判断是否是文件域:isFormField()

    2. 文件的完整路径:getName()

    3. 文件的大小:getSize()

    保存上传而来的文件:

    fileItem.write(new File( 新文件的绝对路径 ));

}


当提交的form包含其他域(如<input type="text">或<input type="submit">)时,通过isFormField()方法判断后进行处理。


>>>>>2011 - 06 - 11更新:

 

用Apache Commons FileUpload来实现文件上传的时候,往往会遇到一些中文乱码的问题,有可能是获取的文件路径或者文件名称为乱码,也有可能获取的表单字段为乱码,以UTF-8编码为例,解决的办法如下:
调用FileUpload.settingHeaderEncoding("UTF-8"),这项设置可以解决路径或者文件名为乱码的问题。
在取字段值的时候,用FileItem.getString("UTF-8"),这项设置可以解决获取的表单字段为乱码的问题。

request.setCheracterEncoding("utf-8");
DiskFileUpload.setHeaderEncoding("utf-8");
FileItem.getString("utf-8");
 




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics