一、文件上传:
struts.multipart.parser常量表示struts2使用什么技术来进行文件上传,默认值是jakarta,如果用cos框架,只需导入包然后改这个常量为cos即可。
1.单文件上传:
a.表单method="post" enctype="multipart/form-data",表单中有一个file表单项name=xxx
b.在Action中写几个属性
private File xxx; // xxx属性用来封装上传的文件
private String xxxContentType;//属性用来封装上传文件的类型
private String xxxFileName;//用来封装上传文件的文件名
提供getter和setter
c.在action对应的执行方法中只需转储文件即可。
d.设置文件大小和类型,需要在action里给上传文件的拦截器设置参数,在action标签中添加<interceptor-ref name="fileUpload">
<!-- 单位为字节,这里为400k 这里的大小是指每个文件上传的大小,若多个文件上传指每一个文件的大小 -->
<param name="maximumSize">409600</param>
<!-- 指定文件上传的类型,在Tomcat 6.0\conf\web.xml中有所有文件类型 -->
<!-- word类型,多个用","号隔开 -->
<param name="allowedTypes">
application/msword
</param>
</interceptor-ref>
<!-- 当然也要加上默认拦截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
文件上传验证没有通过,那么i18n的key如下:
struts.messages.error.uploading - 文件不能上传的通用错误信息
struts.messages.error.file.too.large - 上传文件长度过大的错误信息
struts.messages.error.content.type.not.allowed - 当上传文件不符合指定的contentType
在页面上通过<s:fielderror name="xxx"></s:fielderror>可以获得
2.多文件上传:
只需修改上面Action中的属性为数组即可:
private File[] xxx; // xxx属性用来封装上传的文件
private String[] xxxContentType;//属性用来封装上传文件的类型
private String[] xxxFileName;//用来封装上传文件的文件名
二、文件下载
1.在Action中
private String contentType;
private String fileName;
private InputStream inputStream;//这里的名字不能使用“in”
处理方法:
inputStream=ServletActionContext.getServletContext().getResourceAsStream(xxxx);
类型可以根据后缀判断,对应关系参考tomcat/conf/web.xml
2.在配置文件中设置result: