一、手动实现文件过滤
1.uploadAction.java
//文件过滤属性,通过struts.xml文件配置allowtypes属性值
private String allowtypes;
public String getAllowtypes() {
return allowtypes;
}
public void setAllowtypes(String allowtypes) {
this.allowtypes = allowtypes;
}
比较当前上传文件的格式和允许上传文件格式
//过滤文件
public String filetypes(){
String filetype=getUploadContentType();
String[] types=getAllowtypes().split(",");
for(String type:types){
if(type.equals(filetype)){
return "ok";
}
}
return "error";
}
@Override
public String execute() throws Exception {
if(filetypes().equals("error")){
this.addFieldError("uploadfileerror", "上传文件类型错误");
return "error";
}
2.struts.xml(在struts配置文件中allowTypes的属性值)
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<constant name="struts.i18n.encoding" value="utf-8"/>
<package name="parameter" namespace="/" extends="struts-default">
<action name="upload1" class="com.ru.action.UploadAction">
<param name="savepath">/upload</param>
<!-- 文件上传格式 -->
<param name="allowtypes">image/gif,image/x-png,image/jpg,image/jpeg,application/vnd.openxmlformats-officedocument.wordprocessingml.document</param>
<result name="sucess">/WEB-INF/jsp/sucess.jsp</result>
<result name="error">/WEB-INF/jsp/error.jsp</result>
</action>
</package>
</struts>
二、struts2提供的过滤机制
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<constant name="struts.i18n.encoding" value="utf-8"/>
<package name="parameter" namespace="/" extends="struts-default">
<action name="upload1" class="com.ru.action.UploadAction">
<param name="savepath">/upload</param>
<!-- Struts2提供的文件上传拦截器-->
<interceptor-ref name="fileUpload">
<!-- 允许上传的文件格式 -->
<param name="allowedTypes">image/gif,image/x-png,image/jpg,image/jpeg,application/vnd.openxmlformats-officedocument.wordprocessingml.document</param>
<!-- 附件大小 -->
<param name="maximumSize">2000000</param>
</interceptor-ref>
<!-- 默认拦截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 配置struts2的默认视图文件必须是"input" -->
<result name="input">/WEB-INF/jsp/error.jsp</result>
<result name="sucess">/WEB-INF/jsp/sucess.jsp</result>
</action>
</package>
</struts>