Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 389|回复: 0

[struts学习]我最想要的Struts 2多文件上传

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-11 03:05:11 | 显示全部楼层 |阅读模式
    很多应用都要求在一个界面中可以上传多个文件,Struts 2框架也可以方便地支持多个文件同时上传,一般可以使用数组和List来实现。
          使用数组上传多个文件
         (1)upload.jsp文件,代码11.5所示。
         

    代码11.5  使用数组实现多个文件上传的JSP
          
    <%@ page
             language="java"
             contentType="text/HTML; charset=UTF-8"
             pageEncoding="UTF-8"%>
         <%@ taglib prefix="s" uri="/struts-tags" %>
         <html>
         <head>
         <title>使用数组实现多个文件上传</title>
          </head>
         <body>
         <s:form action="doMultipleUploadUsingArray" method="POST" enctype="multipart/form-data">
             <s:file label="文件1" name="upload" />
              <s:file label="文件2" name="upload" />
              <s:file label="文件3" name="upload" />
              <s:submit value="上传"/>   
          </s:form>
         </body>
         </html>
         (2)在该form中,定义了3个具有相同名称的文件域,所以需要在Action实现类中使用数组来封装这3个文件域。使用数组多个上传文件的业务控制器如代码11.6所示。
         

    代码11.6  使用数组上传多个文件的业务控制器
          
    package ch11;
         import java.io.File;
         import java.text.DateFormat;
         import java.text.SimpleDateFormat;
         import java.util.Date;
         import java.util.Random;
         import org.apache.commons.io.FileUtils;
         import org.apache.struts2.ServletActionContext;
         import com.opensymphony.xwork2.ActionSupport;
         public class MultipleFileUploadUsingArrayAction extends ActionSupport {
             private File[] uploads;
             private String[] uploadFileNames;
             private String[] uploadContentTypes;
             private String[] dir;
             private String[] targetFileName;
             //属性的getter和setter方法
             public File[] getUpload() {
                 return this.uploads;
             }
             public void setUpload(File[] upload) {
                 this.uploads = upload;
             }
             public String[] getUploadFileName() {
                 return this.uploadFileNames;
             }
             public void setUploadFileName(String[] uploadFileName) {
                 this.uploadFileNames = uploadFileName;
             }
             public String[] getUploadContentType() {
                 return this.uploadContentTypes;
             }
             public void setUploadContentType(String[] uploadContentType) {
                 this.uploadContentTypes = uploadContentType;
             }
             //文件上传
             public String upload() throws Exception {
                 // 获得upload路径的实际目录
                 String realPath = ServletActionContext.getRequest().getRealPath(
                         "/upload");
                 //获得实际目录
                 String targetDirectory = realPath;
                 String[] mydir = new String[uploads.length];
                 String[] tname = new String[uploads.length];
                 for (int i = 0; i < uploads.length; i++) {
                     // 生成保存文件的文件名称
                     tname = generateFileName(uploadFileNames);
                     // 保存文件的路径
                     mydir = targetDirectory + "\" + tname;
                     // 建立一个目标文件
                     File target = new File(targetDirectory, tname);
                     // 将临时文件复制到目标文件
                     FileUtils.copyFile(uploads, target);
                 }
                 setDir(mydir);
                 setTargetFileName(tname);
                 return SUCCESS;
             }
             // 为上传文件自动分配文件名称,避免重复
             private String generateFileName(String fileName) {
                 // 获得当前时间
                 DateFormat format = new SimpleDateFormat("yyMMddHHmmss");
                 // 转换为字符串
                 String formatDate = format.format(new Date());
                 // 随机生成文件编号
                 int random = new Random().nextInt(10000);
                 // 获得文件后缀名称
                 int position = fileName.lastIndexOf(".");
                 String extension = fileName.substring(position);
                 // 组成一个新的文件名称
                 return formatDate + random + extension;
             }
             //属性的getter和setter方法
             public String[] getDir() {
                 return dir;
             }
             public void setDir(String[] dir) {
                 this.dir = dir;
             }
             public String[] getTargetFileName() {
                 return targetFileName;
             }
             public void setTargetFileName(String[] targetFileName) {
                 this.targetFileName = targetFileName;
             }
         }
          

      
      
       
       
       
      ★ 说明 ★
        使用数组上传多个文件同上传单个文件非常类似,并不复杂。
          
      
       
        (3)在配置文件中增加如下配置:
         <action name="doMultipleUploadUsingArray"
                     class="ch11.MultipleFileUploadUsingArrayAction"
                     method="upload">
                     <result>/ch11/multipleUploadUsingArray-success.jsp</result>
                     <result name="input">/ch11/multipleUploadUsingArray.jsp</result>
         </action>
         (4)multipleUploadUsingArray-success.jsp的内容如代码11.7所示。
         

    代码11.7  multipleUploadUsingArray-success.jsp内容
          
    <%@ page
             language="java"
             contentType="text/html; charset=UTF-8"
             pageEncoding="UTF-8"%>
         <%@ taglib prefix="s" uri="/struts-tags" %>
         <html>
         <head>
         <title>多个文件上传示例</title>
          </head>
         <body>
         <table border="1">
         <!--  使用迭代标签-->
          <s:iterator value="dir" status="stat">
         <tr>
             <td>文件名称<s:property value="%{#stat.index}" /></td>
              <td><s:property value="%{dir[#stat.index]}" /></td>
         </tr>   
         </s:iterator>
         </table>
         <table border="1">
         <!--  使用迭代标签-->
          <s:iterator value="uploadContentType" status="stat">
         <tr>
             <td>文件类型<s:property value="%{#stat.index}" /></td>
              <td><s:property value="%{uploadContentType[#stat.index]}" /></td>
         </tr>
         </s:iterator>
         </table>
         <table border="1">
         <!--  使用迭代标签-->
          <s:iterator value="+targetFileName" status="stat">
         <tr>
             <td>图片<s:property value="%{#stat.index}" /></td>
              <td><img src="<s:property value=""/bookcode/upload/"+targetFileName[#stat.index]"/>"/></td>
         </tr>
         </s:iterator>
         </table>
         </body>
         </html>
         (5)运行该示例,在浏览器中输入http://localhost:8080/TestS/multipleUpload UsingArray.jsp,界面如图11.9所示。  
       
       
          
       
         
         
          
          
          
          
          
          
          
          
          
          
          
          
         
         
         
       
       
         
       
         图11.9  使用数组上传多个文件界面
        (6)在这里,选择3个gif文件,单击“上传”按钮,结果如图11.10所示。  
       
       
          
       
         
       
         图11.10  使用数组上传多个文件结果
          使用List上传多个文件
         使用List来上传多个文件同数组基本相同,上传JSP文件和success逻辑视图的JSP文件均不用修改,只是需要相应的Action实现类即可。

      

      
      
       
       

         
       

         
       
      
    复制代码

    源码下载:http://www.hnzz3z.com:8103/zz3zcwb/cwb/dir2/TestS99.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-2 12:12 , Processed in 0.405030 second(s), 48 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表