Cos1.3.1+Struts1.2->放在纯jsp里是可以的,但是放在Struts1.2的action中就有问题了,要求解决方案.如果换一中lib,必须处理多个file request,请明示.
<
form
name
="form_attach_add"
method
="post"
enctype ="multipart/form-data"
action ="<%=path%>/addNodeAttach.do" >
< input name ="nodeOid" type ="hidden" value ="<%=nodeOid%>" >
< input name ="nodeTitle" type ="hidden"
value ="<%=nodeTitle%>" >
< input name ="stat" type ="hidden" value ="0" >
< input name ="title" type ="hidden" value ="" >
< input name ="type" type ="hidden" value ="0" >
< table width ="100%" border ="1" cellpadding ="5"
cellspacing ="0" bordercolor ="#999999"
style ="border-collapse: collapse" align ="center" >
< tr bgcolor ="FFFFF4" >
< td width ="30%" height ="22" >
附件:
</ td >
< td width ="70%" height ="22" >
< input type ="file" name ="attachFile" size ="40"
required class ="input" >
< font color ="red" > * </ font >
</ td >
</ tr >
< tr bgcolor ="#F9EACA" >
< td colspan ="6" height ="22" >
< table width ="100%" border ="0" cellspacing ="0"
cellpadding ="0" >
< tr >
< td align ="center" >
< input type ="Button" value ="增 加"
onclick ="button_validate(this.form)" class =input />
< input type ="reset" name ="reset" value ="清 空"
class ="input" >
</ td >
</ tr >
</ table >
</ td >
</ tr >
</ table >
</ form >
enctype ="multipart/form-data"
action ="<%=path%>/addNodeAttach.do" >
< input name ="nodeOid" type ="hidden" value ="<%=nodeOid%>" >
< input name ="nodeTitle" type ="hidden"
value ="<%=nodeTitle%>" >
< input name ="stat" type ="hidden" value ="0" >
< input name ="title" type ="hidden" value ="" >
< input name ="type" type ="hidden" value ="0" >
< table width ="100%" border ="1" cellpadding ="5"
cellspacing ="0" bordercolor ="#999999"
style ="border-collapse: collapse" align ="center" >
< tr bgcolor ="FFFFF4" >
< td width ="30%" height ="22" >
附件:
</ td >
< td width ="70%" height ="22" >
< input type ="file" name ="attachFile" size ="40"
required class ="input" >
< font color ="red" > * </ font >
</ td >
</ tr >
< tr bgcolor ="#F9EACA" >
< td colspan ="6" height ="22" >
< table width ="100%" border ="0" cellspacing ="0"
cellpadding ="0" >
< tr >
< td align ="center" >
< input type ="Button" value ="增 加"
onclick ="button_validate(this.form)" class =input />
< input type ="reset" name ="reset" value ="清 空"
class ="input" >
</ td >
</ tr >
</ table >
</ td >
</ tr >
</ table >
</ form >
public
NodeAttach evaluate()
throws
FileNotFoundException, IOException
...
{
NodeAttach na = new NodeAttach();
int maxPostSize = 3 * 5 * 1024 * 1024;
MultipartRequest mr = new MultipartRequest(ActionContext
.getActionContext().getRequest(), "D:/", maxPostSize, "gb2312");
// 输出反馈信息
Enumeration files = mr.getFileNames();
while (files.hasMoreElements()) ...{
String filePath = (String) files.nextElement();
System.out.println("filePath:" + filePath);
File file = mr.getFile(filePath);
if (file != null) ...{
String fileName = file.getName();
// 创建输入数据流
FileInputStream fis = new FileInputStream(file);
// 创建输出数据流
String newFileName = System.currentTimeMillis() + "."
+ FileU.getFilePostfix(fileName);
FileOutputStream fos = new FileOutputStream(getSaveDir() + "/"
+ newFileName);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = fis.read(buffer, 0, buffer.length)) != -1) ...{
fos.write(buffer, 0, bytesRead);
}
na.setAttachFile(newFileName);
na.setAttachName(fileName);
na.setAttachSize((int) file.length());
na.setAttachType(mr.getContentType(filePath));
}
}
return na;
}
NodeAttach na = new NodeAttach();
int maxPostSize = 3 * 5 * 1024 * 1024;
MultipartRequest mr = new MultipartRequest(ActionContext
.getActionContext().getRequest(), "D:/", maxPostSize, "gb2312");
// 输出反馈信息
Enumeration files = mr.getFileNames();
while (files.hasMoreElements()) ...{
String filePath = (String) files.nextElement();
System.out.println("filePath:" + filePath);
File file = mr.getFile(filePath);
if (file != null) ...{
String fileName = file.getName();
// 创建输入数据流
FileInputStream fis = new FileInputStream(file);
// 创建输出数据流
String newFileName = System.currentTimeMillis() + "."
+ FileU.getFilePostfix(fileName);
FileOutputStream fos = new FileOutputStream(getSaveDir() + "/"
+ newFileName);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = fis.read(buffer, 0, buffer.length)) != -1) ...{
fos.write(buffer, 0, bytesRead);
}
na.setAttachFile(newFileName);
na.setAttachName(fileName);
na.setAttachSize((int) file.length());
na.setAttachType(mr.getContentType(filePath));
}
}
return na;
}
java.io.IOException: Corrupt form data: premature ending
at com.oreilly.servlet.multipart.MultipartParser.(MultipartParser.java: 205 )
at com.oreilly.servlet.MultipartRequest.(MultipartRequest.java: 222 )
at com.oreilly.servlet.MultipartRequest.(MultipartRequest.java: 173 )
at com.chinafi.node_attach.NodeAttachForm.evaluate(NodeAttachForm.java: 159 )
at com.chinafi.node_attach.AddNodeAttach.addNodeAttach(AddNodeAttach.java: 31 )
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.struts.beanaction.ActionInvoker.invoke(ActionInvoker.java: 16 )
at org.apache.struts.beanaction.DefaultActionInterceptor.intercept(DefaultActionInterceptor.java: 5 )
at org.apache.struts.beanaction.BeanAction.execute(BeanAction.java: 246 )
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java: 431 )
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java: 236 )
at org.apache.struts.action.ActionServlet.process(ActionServlet.java: 1196 )
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java: 432 )
at javax.servlet.http.HttpServlet.service(HttpServlet.java: 710 )
at javax.servlet.http.HttpServlet.service(HttpServlet.java: 803 )
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 290 )
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 206 )
at com.chinafi.filter.GlobalFilter.doFilter(GlobalFilter.java: 25 )
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 235 )
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 206 )
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java: 230 )
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java: 175 )
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java: 128 )
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: 104 )
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java: 109 )
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java: 261 )
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java: 844 )
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java: 581 )
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java: 447 )
at java.lang.Thread.run(Unknown Source)
at com.oreilly.servlet.multipart.MultipartParser.(MultipartParser.java: 205 )
at com.oreilly.servlet.MultipartRequest.(MultipartRequest.java: 222 )
at com.oreilly.servlet.MultipartRequest.(MultipartRequest.java: 173 )
at com.chinafi.node_attach.NodeAttachForm.evaluate(NodeAttachForm.java: 159 )
at com.chinafi.node_attach.AddNodeAttach.addNodeAttach(AddNodeAttach.java: 31 )
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.struts.beanaction.ActionInvoker.invoke(ActionInvoker.java: 16 )
at org.apache.struts.beanaction.DefaultActionInterceptor.intercept(DefaultActionInterceptor.java: 5 )
at org.apache.struts.beanaction.BeanAction.execute(BeanAction.java: 246 )
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java: 431 )
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java: 236 )
at org.apache.struts.action.ActionServlet.process(ActionServlet.java: 1196 )
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java: 432 )
at javax.servlet.http.HttpServlet.service(HttpServlet.java: 710 )
at javax.servlet.http.HttpServlet.service(HttpServlet.java: 803 )
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 290 )
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 206 )
at com.chinafi.filter.GlobalFilter.doFilter(GlobalFilter.java: 25 )
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 235 )
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 206 )
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java: 230 )
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java: 175 )
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java: 128 )
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: 104 )
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java: 109 )
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java: 261 )
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java: 844 )
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java: 581 )
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java: 447 )
at java.lang.Thread.run(Unknown Source)