主要思想:浏览器à过滤器à拦截器àActionàResultàjsp的过程。
重要核心:1,表单提交时,enctype=”multipart/form-data”
2,struts.xml文件的配置。
3,Action文件中,设置三个变量记录上传文件信息,分别为File (变量名为表单中file的name属性值)、String类型的FileName(变量名为表单的name属性值+FileName)文件名、String类型的ContentType(变量名为表单的name属性值+ContentType)。
4,在Action的方法中使用FileUtils工具类完成上传,使用copyFile方法,两个参数都是File,分别为上传的源文件,由File属性接收;新建的文件,以指定的文件名保存到指定的目录。
5,在struts.xml中设置默认拦截器栈,可以设置最大文件大小,以及限制上传的文件类型。
步骤:
1, 导入需要的jar包,配置StrutsPrepareAndExecuteFilter过滤器。
2, 写一个jsp,即文件上传的表单,
<form action="${pageContext.request.contextPath }/uploadAction_upload" method="post" enctype="multipart/form-data">
<input type="file" name="image" />
<input type="submit" value="提交" />
</form>
3,写struts.xml配置文件,根据提交的路径进行配置,
<struts>
<constant name="struts.devMode" value="true" /> //配置成开发模式
<package name="day25" namespace="/" extends="struts-default">
<action name="uploadAction_*" class="cn.itcast.action.UploadAction" method="{1}">
<result name="success">/success.jsp</result> //上传成功的处理页面
<result name="input">/error.jsp</result> //上传失败的处理页面
</action>
</package>
</struts>
4, 编写Action,名为UploadAction,定义三个字段值,并提供getter、setter方法,分别为File (变量名为表单中file的name属性值)、String类型的FileName(变量名为表单的name属性值+FileName)文件名、String类型的ContentType(变量名为表单的name属性值+ContentType)。在主方法upload中,获取上传的目标路径,并建立制定名称的文件,并通过FileUtils的copyFile(File srcFile,FiledestFile)将上传的源文件上传到指定的位置。
private File image;
private String imageContentType;
private String imageFileName;
//省略了getter和setter方法。。。
public String upload() {
ServletContext servletContext = ServletActionContext.getServletContext();
String realpath = servletContext.getRealPath("/upload");
try {
File file = new File(realpath,imageFileName);
FileUtils.copyFile(image, file);
} catch (IOException e) {
throw new RuntimeException(e.getMessage(),e);
}
return SUCCESS;
}
5,在struts.xml文件中引用默认的拦截器,对Action进行拦截。
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.multipart.maxSize" value="86170804"/>
<package name="day25" namespace="/" extends="struts-default">
<action name="uploadAction_*" class="cn.itcast.action.UploadAction" method="{1}">
<result name="success">/success.jsp</result>
<result name="input">/error.jsp</result> //返回input时跳转的jsp页面
<interceptor-ref name="defaultStack"> //引用默认的拦截器栈
<param name="fileUpload.maximumSize">10000000</param> //设置最大文件大小
<param name="fileUpload.allowedExtensions">.txt,.jpg,.doc</param>//对上传文件的类型进行限定
</interceptor-ref>
</action>
</package>
<!-- 配置上传文件的出错信息的资源文件 -->
<constant name="struts.custom.i18n.resources" value="fileuploadmessage"/>
</struts>
6,开启tomcat服务器测试。