1. struts2文件上传
a) jsp页面 form表单需要设置属性:enctype="multipart/form-data"
b) method="post"
c) 文件上传的file标签的name要和action中定义的三个属性名称对应
举例:
页面代码<s:file name="myupload"></s:file>
action中成员变量定义如下
// 上传多个文件的集合文本
private List<File> myupload;
// /多个上传文件的类型集合
private List<String> myuploadContentType;
// 多个上传文件的文件名集合
private List<String> myuploadFileName;
d) action类生成三个集合的get,set方法
e) struts.xml中注册上传 的action
f) struts.xml中上传action标签中的其他设置
i. 如何使用拦截器控制上传文件
1. 当拦截器设置的文件类型,文件大小不满足跳转的页面:
a) <result name="input" type="redirect">页面或者action</result>
b) input:固定写法
2. 应用fileUpload拦截器:
<interceptor-ref name="fileUpload"></interceptor-ref>
a) fileUpload:默认的拦截器之一,不需要自己定义此拦截器
b) <param name="">参数</param>
i. name 可填写的值:
1. allowedExtensions:指定允许上传的文件后缀名
举例 参数:png,bmp,jpg,docx,xls
2. allowedTypes:指定允许上传的文件的类型, 如果存在多种类型,以逗号隔开。注意:这里添的不是文件的扩展名, 而是对应的ContentType。
举例:参数:可写image/bmp,image/x-png,image/gif
3. maximumSize:指定允许上传的文件的最大字节数。单位是字节 举例:参数:可写 1000000 相当于是上传的文件不能大于1m
3. 关于maximumSize 引发的问题
上传的文件大小明明超过设置的大小而不进行result 的跳转
解决办法:
在package标签中设置
<constant name="struts.multipart.maxSize" value="9000000"></constant>
后续发现及说明:
1. struts.multipart.maxSize:掌控整个项目所上传文件的最大的Size
2. struts.multipart.maxSize默认2M
3. fileUpload拦截器的maximumSize属性
必须小于struts.multipart.maxSize的值
4. 需要重新设置默认拦截器,否则会报异常
<interceptor-ref name="defaultStack"></interceptor-ref>
5. 关于No result defined for action com.ht.action异常:
配置完毕,选择文件后提交时报错。
初步判断:
无法执行actino中的代码,出现异常需要跳转到其他页面,但是action没有找到一个关于异常跳转的result。所以是404。
如果有,将跳转到指定要跳转的地方,不会报404
action缺少的代码补充:
<result name="input" type="redirect">页面或者action</result>
如果补充完以上代码将不会再报此异常,会进行跳转。但是文件依旧无法上传。
我是如何解决此异常的?
经过检查发现问题出在上传页面的:type="post",修正为
method="post" ,文件即可正常上传。
文件上传需要仔细检查页面上传代码以及aciont 类中
的3个集合名称,以免出错。