使用apache的commons-fileupload包中的org.apache.struts.upload.MultipartRequestHandler来实现.
在org.apache.struts.upload.MultipartRequestHandler的源码中可以看到如下方法:
/**
Hashtable<wbr></wbr><wbr></wbr> getFileElements();
具体实现为,在action文件中加入如下代码:
java 代码
- MultipartRequestHandler multipartRequestHandler = form.getMultipartRequestHandler();
- Hashtable elements = multipartRequestHandler.getFileElements();
-
- Collection values = elements.values();
- int k = 0;
- for (java.util.Iterator m= values.iterator(); m.hasNext();)
- {
- FormFile file = (org.apache.struts.upload.FormFile) m.next();
-
- if (file == null || file.getFileSize() == 0
- || file.getFileName().equals(""))
- {
- continue;
- }
- k++;
-
- System.out.println(" formfile="+file.getFileName());
- }
jsp页面是有要求的,
首先第一条要求Form表单 是带有enctype="multipart/form-data"属性
第二条是更关键的问题,也是我们容易出错的地方,要求每人file域不能是相同的名称,如果名称相同的话,multipartRequestHandler.getFileElements()只会得到同名file的最后一条,因为multipartRequestHandler.getFileElements();返回的对象是Hashtable,它是将file域的名称做为唯一Key值的,所以要求file域的名称不能相同,这是网上问的为什么只能上传最后一个文件的原因.
做到以上两点,那么structs多文件上传就ok了.