批量文件上传 | 学习笔记

简介: 快速学习批量文件上传,介绍了批量文件上传系统机制, 以及在实际应用过程中如何使用。

开发者学堂课程【Java Web开发系列课程 - Struts2框架入门批量文件上传】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/537/detail/7321


批量文件上传

 

目录:

一、批量文件上传介绍

二、empty()介绍

三、remove([expr])介绍

四、Server.xml 代码演示

五、Action 处理代码

六、Struts.xml 配文件

 

一、批量文件上传介绍

常情况下图片方面,需要多张图片上传,首先与单个文件上传不一样的是,在页面上会发生改变struts2可以将批量文件处理为数组上传到 action 中

Jsp 代码:

<style type="text/css">

p{margin:5px;}

</style>

<script type="text/javascript src="js/jquery-1.11.3.js"></script>

<script type="text/javascript">$(function(){

$("#btn').click(function(){

var field "<p><input typem'file"

namem'file' /><input typem"button’ valuem"删除" onclick='removed(this);'/></p>";

$("#files').append(field);

});

});

function removed(o){

$(o).parent().remove();

}

</script>

</head>

</script>

</head>

<body>

<form action="batch.action" method="post"

enctype="multipart/form-data">

文件:<input type="file" namea"file"/><input

type="button" id="btn"value="加"/>

<div id="files"></div>

<input type="submit" value="上传"/>

</form>

</body>


二、empty() 介绍

返回值 jQuery

概述 V1.0

删除匹配的元素集台中所有的子节点

示例

描述:

把所有段落的子元素(包括文本节点)删除

HTML 代码:

<p>Hello,<span)Persen</span><a href="#">and person</a></p >

jQuery 代码:

$("p"). enpty():

结果:

<p></p>

 

三、remove([expr])介绍

概述

从 DOM 中除所有匹配的元素

这个方法不会把匹配的元素从jQuery对象中删除,因而可以在将来再使用这些匹配的元素,但除了这个元素本身得以保留之其他的比如定的事件,附加的数等都会被移

参数

expr  String      V1.0

用于选元素的 jQuery 表达式

示例描述:

从 DOM 中把所有段落

HTML 代码:

<p>Hello</p > how are <p>you?</p >

jQuery 代码:

$(p").remove ();

结果:

how are

述:

从 DOM 中把带有 hello 类的段落删除 

HTML 代码:

<p class= "hello">Hello</p> how are <p>you?</p>

 

四、Server.xml 代码演示

<!-- Use the tockoutreaim to pievens attempes to guess user pesswords

Via a bruse-torce attack -->

Reaim clasalame="ora.spacbe gatalina.realm.lockoutResln',

< !-- This Realm uses the UserDatabase configured in the glebal JNDI

resouress under the key "userDatabase", Any edies

that are performed against this userDatabase art inmediately available for use by the Realm.-->

<Reaim classHame="org.apache.catalino.realm.UserDatabaseRealm"

resourceName="UserDatabase"/>

</Realm>

<Host name-"locathost" appBase=webapps"

unpackWARs=true autoDeplove="true",

<!-- Singhesignon vaive, share authentication between web applications

Documentation ati dock/confia/valve.htmi -->

<!--

<Valve classname="org.apache.catalina.authenticator

SinglesignOn"/>

-->

<!-- Aecess leg procnssns all example.

Documentation as: /docs/contia/valve.html

Note: The pattern used is equivalens to wsing pattern-"ccrmon" --

<Valve classNane="org.pache.cataling.valves,AccessLocValve" directory="logs

Prefix="localhost_ access_ log." suttix=".txt"

Pattern="&h &'1 &o &t dootiorggoot! &s *b" />

<Context path="/filcupload" doBase="E:(resooces1150526\struts2\demo 14struts_2 fileupload\WehRoot" reloadablemstrue

</Hoat>

</Engine>

</Service>

</Server>


五、Action 处理代码

public class BatchUploadAction

private File[] file;

private String[] fileFileName;

private String[] fileContentType;

public String execute() throws I0Exception{ 

//写文件的过程

HttpServletRequest reguest =

ServletActionContext.getRequest();

String path=request.getRealPath("/upload");

for(int i=0:i<file.length;i++){

InputStream is = new FileInputStream(file[i]);

Outputstream os = new FileOutputstream(new

File(path,fileFileName[i]));

byte[] buffer = new byte[200]; int len=0;

while((len=is.read(buffer))!=-1){

os.write(buffer,8,len);

os.close(); is.close();

return Action.SUCCESS;

}

public File[] getFile(){

return file;

}

public void setFile(File[] file){

this.file = file;

}

public String[] getFileFileName(){

return fileFileName;

}

public void setFileFileName(String[] fileFileName){

this.fileFileName = fileFileName;

}

public String[] getFileContentType(){

return fileContentType;

}

public void setFileContentType(String[] fileContentType){

this.fileContentType = fileContentType;

}

}

 

六、Struts.xml 配置文件

<action name="batch" class="cn.sxt.action.BatchUploadAction"

<result>/index.jsp</result>

<interceptor-ref name="fileUpload"

<param name="maximumSize">20971520</param)

</interceptor-ref>

<interceptor-ref namem"defoultstack"/>

</action>

相关文章
|
存储 区块链 CDN
推荐几个免费好用的图床
图床一直以来都是很多人的刚性需求,无论是站长,还是平时逛论坛、写博客的用户,再或者是做外贸生意都可能需要用到图床。好用的图床提供了长期稳定存储且高访问能力的图片托管能力,这也是大家选择图床的核心因素。所以在这里我推荐几款免费且超好用的图床。
1303 0
SVN 将文件还原到之前的指定版本
SVN 将文件还原到之前的指定版本
2969 1
SVN 将文件还原到之前的指定版本
|
9月前
|
SQL DataX HIVE
【YashanDB知识库】DataX迁移Hive到崖山分布式
本文来自YashanDB官网,介绍通过DataX将Hive数据迁移到YashanDB的实现方法。源环境为Hive 3.1.3,目标为YashanDB 23.2.3.100。文章提供了Hive与YashanDB的建表脚本、数据类型映射及DataX配置示例,包含reader和writer插件参数设置,并通过`datax.py`执行同步任务。内容详尽展示了数据迁移的全流程。
【YashanDB知识库】DataX迁移Hive到崖山分布式
|
9月前
|
编解码 监控 虚拟化
Hyper分辨率优化技术,怎么使得虚拟机中的图形应用能够以更高的清晰度呈现
Hyper分辨率优化技术通过增强虚拟机的图形处理能力,显著提升图像清晰度和视觉体验,适用于图形设计、视频编辑等场景。该技术依赖于虚拟机的硬件配置、显卡驱动及显示设置,确保高分辨率内容的最佳呈现。使用时需合理设置分辨率,定期更新驱动并监控性能,以实现最佳效果。
|
7月前
|
人工智能 监控 API
全网跪求的抢票神器!用 CodeBuddy 联动魔搭 MCP,我把 12306 抢票系统玩明白了
CodeBuddy 作为智能编程领域的佼佼者,无需用户具备深厚的编程知识,就能依据用户需求迅速生成高效代码。在票务信息获取方面,它巧妙地构建起与两款 MCP 顺畅交互的桥梁。通过简洁直观的指令输入,CodeBuddy 将用户对票务信息的需求精准转化为机器可理解的语言,为后续获取信息的流程奠定坚实基础。
583 2
|
12月前
|
存储 缓存 资源调度
阿里云服务器经济型、通用算力型、计算型、通用型、内存型实例区别与选择指南
在我们通过阿里云的活动选购云服务器的时候会发现,相同配置的云服务器往往有多个不同的实例可选,而且价格差别也比较大,这会是因为不同实例规格的由于采用的处理器不同,底层架构也有所不同(例如X86 计算架构与Arm 计算架构),因此不同实例的云服务器其性能与适用场景是有所不同。本文将详细解析阿里云的经济型、通用算力型、计算型、通用型和内存型实例的性能特点及适用场景,帮助用户根据自己的业务需求做出明智的选择。
|
11月前
|
弹性计算 运维 自然语言处理
产品测评 | 感受操作系统智能助手OS Copilot新功能带来的运维效率飞升
近期,我再次评测了阿里云OS Copilot的新版本,发现其在命令执行、任务自动化、文件处理及知识问答等方面表现出色,特别是-t参数显著提升了70%的效率。使用过程中,我发现它不仅简化了复杂任务的处理,还提供了中文解释配置文件的功能,极大地方便了初学者。总结来看,OS Copilot极大地提升了Linux运维效率,但仍需在自然语言理解、用户界面优化和错误处理机制等方面进一步改进。未来若能支持更多操作系统并集成更多实用工具,必将成为Linux用户的得力助手。
|
API 开发者
微信native支付对接案例详解
本文详细介绍了微信Native支付的对接流程,包括效果展示、产品介绍、接入前准备、开发指引、API列表、支付通知等,并强调了只有通过微信认证的服务号才能对接微信支付。每年需支付300元认证费用。
476 3
|
机器学习/深度学习 人工智能 Cloud Native
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
261 3
|
Android开发 开发者 Kotlin
Android 多进程情况下判断应用是否处于前台或者后台
本文介绍在多进程环境下判断Android应用前后台状态的方法。通过`ActivityManager`和服务信息`RunningAppProcessInfo`可有效检测应用状态,优化资源使用。提供Kotlin代码示例,帮助开发者轻松集成。
1074 8