Struts2使用开源项目Apache Jakarta Commons FileUpload和内建的FileUploadInterceptor拦截器实现文件上传. |
实现原理 :
Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。
具体实现
前段时间Apache发布了Struts 2.1GA,所以本文的实现是以该版本的Struts作为框架的。以下是例子所依赖类包的列表:
其中commons-io-1.1.jar和commons-fileupload-1.1.3.jar可以在
http://jakarta.apache.org/
上下载.
★ 文件上传页面 index.jsp:
![](https://i-blog.csdnimg.cn/blog_migrate/04e85f05536ccd79982bbca17251f63e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/944d071149be1c8c4402f26bdcd107b0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/04e85f05536ccd79982bbca17251f63e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/944d071149be1c8c4402f26bdcd107b0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
先将表单的提交方式设为POST,然后将enctype设为multipart/form-data,这并没有什么特别之处.
★ 处理文件上传 FileUploadAction.java:
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/04e85f05536ccd79982bbca17251f63e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/944d071149be1c8c4402f26bdcd107b0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a5ca97a1042a494993b61012f0c7f4e7.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/e1ed2ced3b3e975bd246687204c32ce4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/84b88d7ce3b476e13678154aa69b5b89.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a5ca97a1042a494993b61012f0c7f4e7.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/e1ed2ced3b3e975bd246687204c32ce4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/84b88d7ce3b476e13678154aa69b5b89.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a5ca97a1042a494993b61012f0c7f4e7.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/e1ed2ced3b3e975bd246687204c32ce4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/84b88d7ce3b476e13678154aa69b5b89.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a5ca97a1042a494993b61012f0c7f4e7.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/e1ed2ced3b3e975bd246687204c32ce4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/84b88d7ce3b476e13678154aa69b5b89.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a5ca97a1042a494993b61012f0c7f4e7.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/e1ed2ced3b3e975bd246687204c32ce4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/84b88d7ce3b476e13678154aa69b5b89.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a5ca97a1042a494993b61012f0c7f4e7.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/e1ed2ced3b3e975bd246687204c32ce4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/84b88d7ce3b476e13678154aa69b5b89.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7a3782e39bce8b40e9b05a5e4fd452d8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/da43bcbc871cd4f18defa9179da7af64.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
在fileupload.jsp中,只有doc一个字段,而FileUploadAction.java中,却有三个字段,Struts2怎么通过页面的一个字段设置Action里的三个字段呢?没错,这就是FileUploadInterceptor的功劳了!你所要做的只是按照一定的样式命名这三个字段的set方法,而字段名可以任意命名。第一个File类型的字段的set方法还是以常规的方式命名,另两个String类型的字段的set方法必须分别以“File字段的set方法名+FileName”和“File字段的set方法名+ContentType”来命名。
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9723ec7779ef47d51f1f48b9337ffca0.gif)
OK!源码可以我的微软网盘下载.
![163529.html](https://i-blog.csdnimg.cn/blog_migrate/ff8c78812e5e97026fd8a253b826a4f4.jpeg)