Struts 2多文件上传

很多应用都要求在一个界面中可以上传多个文件,Struts 2框架也可以方便地支持多个文件同时上传,一般可以使用数组和List来实现。

使用数组实现上传多个文件:

1upload.jsp文件,代码11.5所示。

<%@ 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个文件域。使用数组多个上传文件的业务控制器如代码

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[i] = generateFileName(uploadFileNames[i]); 

            // 保存文件的路径 

            mydir[i] = targetDirectory + "\\" + tname[i]; 

            // 建立一个目标文件 

            File target = new File(targetDirectory, tname[i]); 

            // 将临时文件复制到目标文件 

            FileUtils.copyFile(uploads[i], 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> 

 

 4multipleUploadUsingArray-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> 

 运行该示例,在浏览器中输入http://localhost:8080/TestS/multipleUpload UsingArray.jsp,界面如图

 

 

 

 

 



 

 

 6)在这里,选择3gif文件,单击“上传”按钮,结果如图



 

使用List上传多个文件:

使用List来上传多个文件同数组基本相同,上传JSP文件和success逻辑视图的JSP文件均不用修改,只是需要相应的Action实现类即可。

代码转载自:https://pan.quark.cn/s/a4b39357ea24 本文重点阐述了利用 LabVIEW 软件构建的锁相放大器的设计方案及其具体实施流程,并探讨了该设备在声波相位差定位系统中的实际运用情况。 锁相放大器作为一项基础测量技术,其核心功能在于能够精确锁定微弱信号的频率参数并完成相关测量工作。 在采用 LabVIEW 软件开发的锁相放大器系统中,通过计算测量信号与两条参考信号之间的互相关函数,实现对微弱信号的频率锁定,同时输出被测信号的幅值信息。 虚拟仪器技术是一种基于计算机硬件平台的仪器系统,其显著特征在于用户可以根据实际需求自主设计仪器功能,配备虚拟化操作界面,并将测试功能完全由专用软件程序实现。 虚拟仪器系统的基本架构主要由计算机主机、专用软件程序以及硬件接口模块等核心部件构成。 虚拟仪器最突出的优势在于其功能完全取决于软件编程,用户可以根据具体应用场景灵活调整系统功能参数。 在基于 LabVIEW 软件开发的锁相放大器系统中,主要运用 LabVIEW 软件平台完成锁相放大器功能的整体设计。 LabVIEW 作为一个图形化编程环境,能够高效地完成虚拟仪器的开发工作。 借助 LabVIEW 软件,可以快速构建锁相放大器的用户操作界面,并且可以根据实际需求进行灵活调整和功能扩展。 锁相放大器系统的关键构成要素包括测量信号输入通道、参考信号输入通道、频率锁定处理单元以及信号幅值输出单元。 测量信号是系统需要检测的对象,参考信号则用于引导系统完成对测量信号的频率锁定。 频率锁定处理单元负责实现测量信号的锁定功能,信号幅值输出单元则负责输出被测信号的幅值大小。 在锁相放大器的实际实现过程中,系统采用了双路参考信号输入方案来锁定测量信号。 通过分析两路参考信号之间的相...
边缘计算环境中基于启发式算法的深度神经网络卸载策略(Matlab代码实现)内容概要:本文介绍了在边缘计算环境中,利用启发式算法实现深度神经网络任务卸载的策略,并提供了相应的Matlab代码实现。文章重点探讨了如何通过合理的任务划分与调度,将深度神经网络的计算任务高效地卸载到边缘服务器,从而降低终端设备的计算负担、减少延迟并提高整体系统效率。文中涵盖了问题建模、启发式算法设计(如贪心策略、遗传算法、粒子群优化等可能的候选方法)、性能评估指标(如能耗、延迟、资源利用率)以及仿真实验结果分析等内容,旨在为边缘智能计算中的模型推理优化提供可行的技术路径。; 适合人群:具备一定编程基础,熟悉Matlab工具,从事边缘计算、人工智能、物联网或智能系统优化方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究深度神经网络在资源受限设备上的部署与优化;②探索边缘计算环境下的任务卸载机制与算法设计;③通过Matlab仿真验证不同启发式算法在实际场景中的性能表现,优化系统延迟与能耗。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注算法实现细节与仿真参数设置,同时可尝试复现并对比不同启发式算法的效果,以深入理解边缘计算中DNN卸载的核心挑战与解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值