使用Struts2控制文件上传
1.在Struts2的struts.properties文件中,有如下配置,主要用于Struts2上传文件时的上传解析器
#指定使用COS的文件上传解析器
#struts.multipart.parser=cos
#指定使用Pell的文件上传解析器
#struts.multipart.parser=pell
#struts2默认使用Jakarta的Common-FileUpload的文件上传解析器
struts.multipart.parser=jakarta
需要commons-io-1.3.2.jar、commons-fileupload-1.2.1.jar
?
2.实现文件上传的Action
<form action="upload.action" method="post" enctype="multipart/form-data">
????? 文件标题:<input type="text" name="title" /><br>
????? 选择文件:<input type="file" name="upload" /><br>
????? <input value="上传" type="submit" />
</form>
Struts2框架负责解析HttpServletRequest请求中的参数,包括文件域,Struts2使用File类型来封装文件域
public class UploadAction extends ActionSupport{
????? //封装文件标题请求参数的属性
????? private String title;
????? //封装上传文件域的属性
????? private File upload;
????? //封装上传文件类型的属性
????? private String uploadContentType;
????? //封装上传文件名的属性
????? private String uploadFileName;
????? //直接在struts.xml文件中配置的属性
????? private String savePath();
????? //getter,setter方法,ServletActionContext.getRequest().getRealPath(savePath);
????? public String execute() throws Exception{
???????????? //以服务器的文件保存地址和原文件名建立上传文件输出流
???????????? FileOutputStream fos = new FileOutputStream(getSavePath() + "\" + getUploadFileName());
???????????? FileInputStream fis = new FileInputStream(getUpload());
???????????? byte[] buffer = new byte[1024];
???????????? int len = 0;
???????????? while((len = fis.read[buffer]) > 0){
??????????????????? fos.write(buffer,0,len);
???????????? }
????????????? return SUCCESS;
????? }
}
类型为File的xxx属性封装了该文件域对应的文件内容
类型为String的xxxFileName属性封装了该文件域对应的文件的文件名
类型为String的xxxContentType属性封装了该文件域对应的文件的文件类型
?
3.配置文件
struts.xml文件中
<action name="upload" + getUploadFileName());
???? FileInputStream fis = new FileInputStream(getUpload());
???? byte[] buffer = new byte[1024];
???? int len = 0;
???? while((len = fis.read[buffer]) > 0){
???????????? fos.write(buffer,0,len);
???? }
???? return SUCCESS;
}
?
5.拦截器实现文件过滤
Struts2提供了一个文件上传的拦截器,通过配置该拦截器可以更轻松地实现文件过滤。Struts2中文件上传的拦截器是fileUpload。
struts.xml文件中
<action name="upload" class="UploadAction">
?????? <!-- 配置fileUpload的拦截器 -->
?????? <interceptor-ref name="fileUpload">
?????????????? <!-- 配置允许上传的文件类型 -->
?????????????? <param name="allowedType">image/gif,image/jpeg</param>
?????????????? <!-- 配置允许上传的文件大小 -->
?????????????? <param name="maximumSize">20000</param>
?????? </interceptor-ref>
?????? <interceptor-ref name="defaultStack"/>
?????? <param name="savePath">/upload</param>
?????? <result name="input">/input.jsp</result>
?????? <result>/succ.jsp</result>
</action>
?
struts.multipart.saveDir属性
struts.multipart.maxSize属性