本章描述:
上传文件是很多Web程序都具有的功能,
利用平台提供的默认变量命名规则的上传附件的方法,上传图片并实行前后台检测的方式检测上传图片的类型、大小。
可配置条件:
1、附件上传后保存的文件名称按原文件名命名(可关注步骤二action的写法)
2、附件文件上传路径(FileUploadSupport中新增常量)
/**
* 时间戳形式保存文件(默认上传附件类型)
* 推荐使用默认时间戳方式,解决linux系统下汉字栏目的问题
*/
public static final int FILE_ADAPTER_TIMESTAMP=1;
/**
* 原文件名
*/
public static final int FILE_ADAPTER_CONSTANT=0;
/**
* 原文件名+时间戳形式
*/
public static final int FILE_ADAPTER_CONSTANT_TIMESTAMP=2;
/**
* 原文件英文保持原有,汉字变成拼音形式_时间戳
*/
public static final int FILE_ADAPTER_PINYIN_TIMESTAMP=3;
效果截图
步骤1:导入平台所需JAR包
以上依赖包wafstruts2-201103.jar由太极公司产品部门提供其他皆由struts2本身提供。
步骤2:类文件(action)
操作1:更改继承方法
替换前代码如下,注意红色字体标注的部分
import com.taiji.waf.struts2.WafSupport;
public class ****Action extends WafSupport{
…...
}
替换后代码如下
import com.taiji.waf.struts2.FileUploadSupport;
public class ExampleUploadFileAction extends FileUploadSupport{
……
}
操作2:关于上传附件路径的写法
第一种方式(平台默认的物理路径)
在相应的插入、更新方法中加入如下代码
String fileName="";//默认返回上传后附件的文件名称
if(this.getUploadFileName()!=null){//判断当前上传文件是否为空
fileName=this.insertUploadFile();//调用平台提供的默认的上传方法
}
第二种方式(开发者自定义上传路径)
1、定义上传路径
private static final String DIR = WAFConfigure.getProperty("UploadFile_Path");
2、调用指定路径上传附件方法
String fileName="";//默认返回上传后附件的文件名称
if(this.getUploadFileName()!=null){//判断当前上传文件是否为空
fileName=this.insertUploadFile(DIR);//调用平台提供的默认的上传方法
}
操作3:定义上传文件名称规则;
平台默认的FileUploadSupport类新增4中上传文件名称存储方式如下,为空时按时间戳形式存储
/**
* 时间戳形式保存文件(默认上传附件类型)
* 推荐使用默认时间戳方式,解决linux系统下汉字栏目的问题
*/
public static final int FILE_ADAPTER_TIMESTAMP=1;
/**
* 原文件名
*/
public static final int FILE_ADAPTER_CONSTANT=0;
/**
* 原文件名+时间戳形式
*/
public static final int FILE_ADAPTER_CONSTANT_TIMESTAMP=2;
/**
* 原文件英文保持原有,汉字变成拼音形式_时间戳
*/
public static final int FILE_ADAPTER_PINYIN_TIMESTAMP=3;
步骤3:JSP页面
操作1:修改表单提交配置
修改前:
<form name="***Form" method="post"
action="***.action" onSubmit="return false;">
修改后:
<form name="***Form" method="post"
action="***.action" enctype="multipart/form-data"
onSubmit="return false;">
操作2:上传附件框的写法:
<s:file name="upload" id="upload" cssClass="inputTextFile" onkeypress="return false;"/>
<span class="noticeWord"> 请选择bmp,jpg,gif,png类型的图片作为照片且不允许为空</span>
其中cssClass为Struts2调用样式名称的方法, onkeypress="return false;"让附件上传的输入框为只读形式避免手动输入造成的BUG
步骤4:增加JSP页面验证
操作1:添加平台提供的公用验证文件
<script src="js/common.js"></script>
操作2:验证附件大小、图片类型
<script type='text/javascript'>
//验证图片类型、大小
function verificationImg(obj)
{
var d=new UpLoadFileCheck();
d.IsImg=true; //是否验证图片类型
d.AllowImgFileSize=20;//图片的大小,单位为KB
d.CheckExt(obj)
}
</script>
操作3:输入框加入验证方法
<s:file name="upload" id="upload" cssClass="inputTextFile"
onchange="verificationImg(this)" onkeypress="return false;"></s:file>
之前在JSP验证上我们填写的附件上传框加入onchange="verificationImg(this)" 为我们的上传附件的表单加入了当选中图片后验证的方法。如果想修改验证事件的触发事件或方式直接更改即可。
步骤5:STRUTS2-XML添加验证规则
<action name="insertExampleUploadFile "
class="com.taiji.waf.example.uploadfile.action.ExampleUploadFileAction"
method="insertExampleUploadFile">
<interceptor-ref name="defaultStack">
<param name="contentType">
image/gif,image/jpeg <!---验证上传附件类型->
</param>
<param name="maximumSize">50000000</param> <!---验证上传附件大小->
</interceptor-ref>
<result name="input">
****/errorFi le.jsp <!---不符合验证规则时,默认调转的页面,开发人员可自行更改-->
</result>
<result name="error">error.jsp</result>
<result name="success">success.jsp</result>
</action>