Struts中下传文件
Struts中上传文件
由于心情+事情的原因,在做文件上传的Demo时,我没有具体的实现,虽然看了两次视频,但是现在做起来感觉到还是有一些问题,果然是好记性不如烂笔头。今天就着已经实现了的机会,写一下注意事项。
在JSP页面中,我们的表单如下:
<form action="fileupload.do" enctype="multipart/form-data"
method="post">
文件名称:
<input type="text" name="title" />
<br />
文件路径:
<input type="file" name="myfile" />
<br />
<input type="submit" value="提交" />
</form>
form表单中有三个属性,其中action是与struts-config.xml中的path路径相对应的,enctype属性必须是上面的这种格式,这样才允许文件上传上去。同样的method方法也必须标明为post,否则的话会出现如下所示的错误:
root cause
java.lang.IllegalArgumentException: Cannot invoke com.cx.struts.FileActionForm.setMyfile - argument type mismatch
org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:1778)
org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:1759)
org.apache.commons.beanutils.PropertyUtilsBean.setNestedProperty(PropertyUtilsBean.java:1648)
org.apache.commons.beanutils.PropertyUtilsBean.setProperty(PropertyUtilsBean.java:1677)
org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1022)
org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:811)
org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:298)
org.apache.struts.util.RequestUtils.populate(RequestUtils.java:493)
org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:816)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
顺便看一下我们的Action实现吧:
public class UploadAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
FileActionForm faf=(FileActionForm)form;
String title=faf.getTitle();
String fileName=faf.getMyfile().getFileName();
FileOutputStream fos=new FileOutputStream("C:\\"+fileName);
fos.write(faf.getMyfile().getFileData());
fos.flush();
fos.close();
System.out.println(title);
System.out.println(fileName);
return mapping.findForward("success");
}
}