struts2之多个文件上传

通过3种方式模拟多个文件上传,效果如下所示

         

目录结构

 

新建Action

第一种方式

复制代码
  
  
package com.ljq.action; import java.io.File; import org.apache.commons.io.FileUtils; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; @SuppressWarnings( " serial " ) public class UploadAction extends ActionSupport{ private File[] image; // 上传的文件 private String[] imageFileName; // 文件名称 private String[] imageContentType; // 文件类型 public String execute() throws Exception { ServletActionContext.getRequest().setCharacterEncoding( " UTF-8 " ); String realpath = ServletActionContext.getServletContext().getRealPath( " /images " ); System.out.println(realpath); if (image != null ) { File savedir = new File(realpath); if ( ! savedir.getParentFile().exists()) savedir.getParentFile().mkdirs(); for ( int i = 0 ;i < image.length;i ++ ){ File savefile = new File(savedir, imageFileName[i]); FileUtils.copyFile(image[i], savefile); } ActionContext.getContext().put( " message " , " 文件上传成功 " ); } return " success " ; } public File[] getImage() { return image; } public void setImage(File[] image) { this .image = image; } public String[] getImageContentType() { return imageContentType; } public void setImageContentType(String[] imageContentType) { this .imageContentType = imageContentType; } public String[] getImageFileName() { return imageFileName; } public void setImageFileName(String[] imageFileName) { this .imageFileName = imageFileName; } }
复制代码

                   

第二种方式

复制代码
  
  
package com.ljq.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; /** * 使用数组上传多个文件 * * @author ljq * */ @SuppressWarnings( " serial " ) public class UploadAction2 extends ActionSupport{ private File[] image; // 上传的文件 private String[] imageFileName; // 文件名称 private String[] imageContentType; // 文件类型 private String savePath; @Override public String execute() throws Exception { ServletActionContext.getRequest().setCharacterEncoding( " UTF-8 " ); // 取得需要上传的文件数组 File[] files = getImage(); if (files != null && files.length > 0 ) { for ( int i = 0 ; i < files.length; i ++ ) { // 建立上传文件的输出流, getImageFileName()[i] System.out.println(getSavePath() + " \\ " + getImageFileName()[i]); FileOutputStream fos = new FileOutputStream(getSavePath() + " \\ " + getImageFileName()[i]); // 建立上传文件的输入流 FileInputStream fis = new FileInputStream(files[i]); byte [] buffer = new byte [ 1024 ]; int len = 0 ; while ((len = fis.read(buffer)) > 0 ) { fos.write(buffer, 0 , len); } fos.close(); fis.close(); } } return SUCCESS; } public File[] getImage() { return image; } public void setImage(File[] image) { this .image = image; } public String[] getImageFileName() { return imageFileName; } public void setImageFileName(String[] imageFileName) { this .imageFileName = imageFileName; } public String[] getImageContentType() { return imageContentType; } public void setImageContentType(String[] imageContentType) { this .imageContentType = imageContentType; } /** * 返回上传文件保存的位置 * * @return * @throws Exception */ public String getSavePath() throws Exception { return ServletActionContext.getServletContext().getRealPath(savePath); } public void setSavePath(String savePath) { this .savePath = savePath; } }
复制代码

            

第三种方式

复制代码
  
  
package com.ljq.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.List; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; /** * 使用List上传多个文件 * * @author ljq * */ @SuppressWarnings( " serial " ) public class UploadAction3 extends ActionSupport { private List < File > image; // 上传的文件 private List < String > imageFileName; // 文件名称 private List < String > imageContentType; // 文件类型 private String savePath; @Override public String execute() throws Exception { ServletActionContext.getRequest().setCharacterEncoding( " UTF-8 " ); // 取得需要上传的文件数组 List < File > files = getImage(); if (files != null && files.size() > 0 ) { for ( int i = 0 ; i < files.size(); i ++ ) { FileOutputStream fos = new FileOutputStream(getSavePath() + " \\ " + getImageFileName().get(i)); FileInputStream fis = new FileInputStream(files.get(i)); byte [] buffer = new byte [ 1024 ]; int len = 0 ; while ((len = fis.read(buffer)) > 0 ) { fos.write(buffer, 0 , len); } fis.close(); fos.close(); } } return SUCCESS; } public List < File > getImage() { return image; } public void setImage(List < File > image) { this .image = image; } public List < String > getImageFileName() { return imageFileName; } public void setImageFileName(List < String > imageFileName) { this .imageFileName = imageFileName; } public List < String > getImageContentType() { return imageContentType; } public void setImageContentType(List < String > imageContentType) { this .imageContentType = imageContentType; } /** * 返回上传文件保存的位置 * * @return * @throws Exception */ public String getSavePath() throws Exception { return ServletActionContext.getServletContext().getRealPath(savePath); } public void setSavePath(String savePath) { this .savePath = savePath; } }
复制代码

              

struts.xml配置文件

复制代码
  
  
<? xml version = " 1.0 " encoding = " UTF-8 " ?> <! DOCTYPE struts PUBLIC " -//Apache Software Foundation//DTD Struts Configuration 2.0//EN " " http://struts.apache.org/dtds/struts-2.0.dtd " > < struts > <!-- 该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配 * .action的请求都由Struts2处理。 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 --> < constant name = " struts.action.extension " value = " do " /> <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 --> < constant name = " struts.serve.static.browserCache " value = " false " /> <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 --> < constant name = " struts.configuration.xml.reload " value = " true " /> <!-- 开发模式下使用,这样可以打印出更详细的错误信息 --> < constant name = " struts.devMode " value = " true " /> <!-- 默认的视图主题 --> < constant name = " struts.ui.theme " value = " simple " /> <!--< constant name = " struts.objectFactory " value = " spring " />--> <!-- 解决乱码 --> < constant name = " struts.i18n.encoding " value = " UTF-8 " /> < constant name = " struts.multipart.maxSize " value = " 10701096 " /> < package name = " upload " namespace = " /upload " extends = " struts-default " > < action name = " *_upload " class = " com.ljq.action.UploadAction " method = " {1} " > < result name = " success " >/ WEB - INF / page / message.jsp </ result > </ action > </ package > < package name = " upload1 " namespace = " /upload1 " extends = " struts-default " > < action name = " upload1 " class = " com.ljq.action.UploadAction2 " method = " execute " > <!-- 要创建 / image文件夹,否则会报找不到文件 --> < param name = " savePath " >/ image </ param > < result name = " success " >/ WEB - INF / page / message.jsp </ result > </ action > </ package > < package name = " upload2 " namespace = " /upload2 " extends = " struts-default " > < action name = " upload2 " class = " com.ljq.action.UploadAction3 " method = " execute " > <!-- 要创建 / image文件夹,否则会报找不到文件 --> < param name = " savePath " >/ image </ param > < result name = " success " >/ WEB - INF / page / message.jsp </ result > </ action > </ package > </ struts >
复制代码

           

上传表单页面upload.jsp

复制代码
  
  
<% @ page language = " java " import = " java.util.* " pageEncoding = " UTF-8 " %> <! DOCTYPE HTML PUBLIC " -//W3C//DTD HTML 4.01 Transitional//EN " > < html > < head > < title > 文件上传 </ title > < meta http - equiv = " pragma " content = " no-cache " > < meta http - equiv = " cache-control " content = " no-cache " > < meta http - equiv = " expires " content = " 0 " > </ head > < body > <!-- ${pageContext.request.contextPath} / upload / execute_upload. do --> <!-- ${pageContext.request.contextPath} / upload1 / upload1. do --> <!-- ${pageContext.request.contextPath} / upload2 / upload2. do --> <!-- --> < form action = " ${pageContext.request.contextPath}/upload2/upload2.do " enctype = " multipart/form-data " method = " post " > 文件1: < input type = " file " name = " image " >< br /> 文件2: < input type = " file " name = " image " >< br /> 文件3: < input type = " file " name = " image " >< br /> < input type = " submit " value = " 上传 " /> </ form > </ body > </ html >
复制代码

显示页面message.jsp

复制代码
  
  
<% @ page language = " java " import = " java.util.* " pageEncoding = " UTF-8 " %> <% @ taglib uri = " /struts-tags " prefix = " s " %> <! DOCTYPE HTML PUBLIC " -//W3C//DTD HTML 4.01 Transitional//EN " > < html > < head > < title > My JSP ' message.jsp ' starting page </ title > < meta http - equiv = " pragma " content = " no-cache " > < meta http - equiv = " cache-control " content = " no-cache " > < meta http - equiv = " expires " content = " 0 " > </ head > < body > 上传成功 < br /> < s:debug ></ s:debug > </ body > </ html >
复制代码
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值