据调查好像可以用这段代码来实现
Hashtable hash=form.getMultipartRequestHandler().getFileElements();
Iterator i = hash.values().iterator();
FormFile formFile = null;
while(i.hasNext()) {
formFile = (FormFile)i.next();
out = new java.io.FileOutputStream(new File(uploadpath + File.separator+filename));
out.write(formFile.getFileData());
} }
但是我用form.getMultipartRequestHandler().getFileElements();取不到FORM中的项目啊,
得到一个NULL值,请教到底怎么回事?
FORM是如下定义的
<form-bean name="S4D2500_Form" type="org.apache.struts.validator.DynaValidatorActionForm">
<form-property name="inputFile" type="org.apache.struts.upload.FormFile"/>
</form-bean>
Hashtable hash=form.getMultipartRequestHandler().getFileElements();
Iterator i = hash.values().iterator();
FormFile formFile = null;
while(i.hasNext()) {
formFile = (FormFile)i.next();
out = new java.io.FileOutputStream(new File(uploadpath + File.separator+filename));
out.write(formFile.getFileData());
} }
但是我用form.getMultipartRequestHandler().getFileElements();取不到FORM中的项目啊,
得到一个NULL值,请教到底怎么回事?
FORM是如下定义的
<form-bean name="S4D2500_Form" type="org.apache.struts.validator.DynaValidatorActionForm">
<form-property name="inputFile" type="org.apache.struts.upload.FormFile"/>
</form-bean>
总结一句就是:任何基于网页控件type=file 形式的多文件上传是不可能做到的.最好也只能通过JS来动态生成FILE控件,再通过一个一个的点浏览来上传多文件.
这是由FILE控件本身的安全性决定的,具体的你可以看一下MSDN,或是HTML的控件文档(好像是叫什么REF23之类的名字,呵呵,记不清了.)
要做到实际意义上的多文件上传(指的是:一次选定多个文件,跟操作本地文件夹一样的那种方式)必须用其它方式解决.比如说APPLET.
所以你所说的那种方式可以放弃了.
另:广告!!! 本人也写了一个多文件上传,是通过FLASH来实现的~可用于商业用途,有感兴趣的请联系: [email protected]
enctype="multipart/form-data"
2.
<form-bean name="lazyForm" type="org.apache.struts.validator.LazyValidatorForm">
<form-property name="file" type="org.apache.struts.upload.FormFile[]"/>
</form-bean>
3.
String dirPath = getServlet().getServletContext().getRealPath("/")
+ "/upload";
Hashtable fileh = actionForm.getMultipartRequestHandler().
getFileElements();
for (Enumeration e = fileh.keys(); e.hasMoreElements(); ) {
String key = (String) e.nextElement();
try {
FormFile formfile = (FormFile) fileh.get(key);
String filename = formfile.getFileName().trim(); //文件名
if (!"".equals(filename)) {
//不同的浏览器传上的文件名可能有区别,有的是全路径的
//在这里保存文件
InputStream ins = formfile.getInputStream();
OutputStream os = new FileOutputStream(dirPath +
File.separatorChar
+ filename);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
ins.close(); }
} catch (Exception ex) {
logger.debug("出错了", ex);
}
}自己看着修改吧。
http://java.chinaitlab.com/Spring/39277.html
<form-bean name="lazyForm" type="org.apache.struts.validator.LazyValidatorForm"/>
更加方便。只是页面,Action,设置,贴得太麻烦了,你自己试一下也很快。
Hashtable fileh = actionForm.getMultipartRequestHandler().
getFileElements(); //这里fileh.size()总是等于1我的结果总是1 而楼主的是 null 而已 。这个问题 比较恼火,我查了好久都没查出原因来。我的帖连接是 :http://community.csdn.net/Expert/topic/5439/5439331.xml?temp=.7901422原因应该在jsp 页面和form 里吧 ,还望有人指点一下。