Struts2实现多文件上传
2011-01-13 22:41
381 查看
实现原理
Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,
然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。
解决方案
在开发Struts应用这前首先要为程序添加Struts支持,有两种方式添加Struts支持:用Myclipse添加方式;
或者也可以手动添加。这也是开发Struts应用程序之前必须准备的工作。在这里我说一下用Myclipse添加的
方式,在做文件上传这个例子时这也是用这种方式添加的。
(说明:我用的是Myclipse8.0版本)
给项目添加Struts支持步骤如下:
1、 à选择你的项目
2、 àMyclipse
3、 à选择Project Capalibities
4、 à选择Add Struts Capalibities…
(这样就为你的项目添加了Struts支持,是不是很简单呢)
1、创建uploadFiles.jsp页面,先将表单的提交方式设为POST,然后将enctype设为multipart/form-data
主要代码如下:
2、创建图片展示页面filesShow.jsp
主要代码如下:
3、在WebRoot下创建UploadImages文件夹用于保存上传的文件
大家应该注意到,在这个UploadFiles.java类中我写了SetUpload, SetUploadFileName,
SetUploadContentType,这几个方法。这是起什么作用呢?聪明的你应该想到了吧,
其实这几个方法是用来绑定要上传的文件的。这个这个upload就是对应uploadFiles.jsp
页面的<s:file name="upload" label="Image File1"></s:file>。
而imageFiles属性是用来在上传成功后展示用的。
5、 配置struts.xml配置文件
6、Web.xml主配置
整个项目的框架结构如下图:
总结
Struts2实现文件上传就是这么简单,只要把<s:file name="XX" />和Action的属性绑定就OK.
4、新建UploadFiles.java这个类的作用是用来将文件拷贝到UploadImages目录下
Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,
然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。
解决方案
在开发Struts应用这前首先要为程序添加Struts支持,有两种方式添加Struts支持:用Myclipse添加方式;
或者也可以手动添加。这也是开发Struts应用程序之前必须准备的工作。在这里我说一下用Myclipse添加的
方式,在做文件上传这个例子时这也是用这种方式添加的。
(说明:我用的是Myclipse8.0版本)
给项目添加Struts支持步骤如下:
1、 à选择你的项目
2、 àMyclipse
3、 à选择Project Capalibities
4、 à选择Add Struts Capalibities…
(这样就为你的项目添加了Struts支持,是不是很简单呢)
1、创建uploadFiles.jsp页面,先将表单的提交方式设为POST,然后将enctype设为multipart/form-data
主要代码如下:
<s:form action="upload" method="post" enctype="multipart/form-data"> <s:token /> <table cellpadding="0" cellspacing="0" width="300px" style="line-height: 40px; text-align: center;" mce_style="line-height: 40px; text-align: center;"> <tr> <td> <s:file name="upload" label="Image File1"></s:file> </td> </tr> <tr> <td> <s:file name="upload" label="Image File2"></s:file> </td> </tr> <tr> <td> <s:file name="upload" label="Image File3"></s:file> </td> </tr> <tr> <td> <s:submit value=" 上 传 " /> </td> </tr> </table> </s:form>
2、创建图片展示页面filesShow.jsp
主要代码如下:
<div style="width: 510px; border: 1px solid gray"> <div style="width: 25px; height: 155px; background-color: silver; float: left; text-align: center; color: teal"> 您上传的图片</div> <center> <s:iterator value="imageFiles" status="statu"> <div id="imgdiv"> <img alt="" src="UploadImages/<s:property/>" width="150"height="145" > </div> </s:iterator> </center> </div> <br /> <button onclick=history.go(-1);>返回</button>
3、在WebRoot下创建UploadImages文件夹用于保存上传的文件
package com.upload.action; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Date; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadFiles extends ActionSupport { /** * */ private static final long serialVersionUID = 1L; private static final int BUFFERED_SIZE = 4 * 1024; private File[] upload; private String[] uploadFileName; private String[] uploadContentType; private String[] imageFiles; public String[] getImageFiles() { return imageFiles; } public File[] getUpload() { return upload; } public void setUpload(File[] uploads) { this.upload = uploads; } public String[] getUploadFileName() { return uploadFileName; } public void setUploadFileName(String[] uploadFileNames) { this.uploadFileName = uploadFileNames; } public String[] getUploadContentType() { return uploadContentType; } public void setUploadContentType(String[] uploadContentTypes) { this.uploadContentType = uploadContentTypes; } public String upload() { String fileType = null; String fileName = ""; imageFiles=new String[upload.length]; for (int i = 0; i < upload.length; i++) { fileType = uploadFileName[i].substring(uploadFileName[i] .lastIndexOf(".")); fileName = (new Date().getTime()+i+1)+ fileType; imageFiles[i]=fileName; File imageFile = new File(ServletActionContext.getServletContext() .getRealPath("/UploadImages") + "/" + fileName); copy(upload[i], imageFile); } return "filesShow"; } private static void copy(File src, File target) { InputStream in = null; OutputStream out = null; try { in = new BufferedInputStream(new FileInputStream(src), BUFFERED_SIZE); out = new BufferedOutputStream(new FileOutputStream(target), BUFFERED_SIZE); byte[] b = new byte[BUFFERED_SIZE]; while (in.read(b) > 0) { out.write(b); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { if (in != null) in.close(); if (out != null) out.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
大家应该注意到,在这个UploadFiles.java类中我写了SetUpload, SetUploadFileName,
SetUploadContentType,这几个方法。这是起什么作用呢?聪明的你应该想到了吧,
其实这几个方法是用来绑定要上传的文件的。这个这个upload就是对应uploadFiles.jsp
页面的<s:file name="upload" label="Image File1"></s:file>。
而imageFiles属性是用来在上传成功后展示用的。
5、 配置struts.xml配置文件
<action name="*" class="com.upload.action.UploadFiles" method="{1}"> <interceptor-ref name="fileUpload"><!-- 用于文件上传的拦截器 --> <param name="allowedTypes"><!-- 允许上传的文件类型 --> image/pjpeg,image/png,image/gif,image/bmp</param> <param name="maximumSize">2097152</param><!-- 允许上传最大文件大小 --> </interceptor-ref> <interceptor-ref name="defaultStack" /><!-- 验证拦截器 --> <interceptor-ref name="token"></interceptor-ref> <result name="filesShow">/filesShow.jsp</result> <result name="invalid.token">/filesShow.jsp</result> <result name="input">/uploadFiles.jsp</result> </action>
6、Web.xml主配置
<filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
整个项目的框架结构如下图:
总结
Struts2实现文件上传就是这么简单,只要把<s:file name="XX" />和Action的属性绑定就OK.
4、新建UploadFiles.java这个类的作用是用来将文件拷贝到UploadImages目录下
相关文章推荐
- Struts2文件的上传和下载实现
- Struts2实现文件上传
- Struts2中使用Common-FileUpload实现文件上传(二)
- struts2实现文件的上传(仅限单文件)和下载
- struts2实现简单文件上传
- Struts2上传文件拦截器实现文件上传
- Struts2实现文件上传下载最终版
- struts2文件上传(使用struts2自带上传方式实现单个文件上传)
- struts2实现文件上传与下载
- Struts2实现文件上传,直接访问JSP页面出现异常
- Struts2实现文件的上传与下载
- struts2的字段校验类型和struts2实现文件上传
- ajaxFileUpload+struts2实现多文件上传
- 4.3.5: Struts2文件上传---拦截器实现文件过滤
- Struts2使用FlashFileUpload.swf实现批量文件上传
- Struts2实现上传单个文件功能
- 基于struts2--实现文件上传下载
- Struts2实现多文件上传
- Struts2实现文件上传和下载
- struts2实现文件上传(单个、批量文件上传)