Struts2文件上传的原理
Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。
基本使用步骤:
- 添加fileUpload拦截器
- 解决Commons FileUpload的依赖包
- 页面使用file类型标签
- Action类中使用set方法接收file, filename, fileContentType
http://struts.apache.org/2.3.1.2/docs/file-upload.html
http://struts.apache.org/2.3.1.2/docs/file-upload-interceptor.html
使用的注意点:
1.struts2的文件上传支持多个文件,在Action类中使用文件数组或List接收。
http://www.blogjava.net/max/archive/2007/03/21/105124.html
2.设置fileUpload参数可以过滤文件类型和大小:allowedTypes, maximumSize(以字节为单位)。
< action name ="fileUpload" class ="tutorial.FileUploadAction" > < interceptor-ref name ="fileUpload" > < param name ="allowedTypes" > image/bmp,image/png,image/gif,image/jpeg </ param > <param name="maximumSize">500000</param> </ interceptor-ref > < interceptor-ref name ="defaultStack" /> < result name ="input" > /FileUpload.jsp </ result > < result name ="success" > /ShowUpload.jsp </ result > </ action >
allowedType指定的是FileContentType,是依靠Commons FileUpload中德DiskFileItem的属性获取。这里的ContentType是通过上传的文件后缀判断的,并没有实际检查文件类型,所以要确保类型正确需要更多处理。
常用的ContentType:
文件类型 | 常见后缀 | contentType |
Excel2007 | xlsx | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
Excel2003 | xls | application/vnd.ms-excel |
Word2003 | doc | application/msword |