批量文件上传 | 学习笔记

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

开发者学堂课程【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
推荐几个免费好用的图床
图床一直以来都是很多人的刚性需求,无论是站长,还是平时逛论坛、写博客的用户,再或者是做外贸生意都可能需要用到图床。好用的图床提供了长期稳定存储且高访问能力的图片托管能力,这也是大家选择图床的核心因素。所以在这里我推荐几款免费且超好用的图床。
1483 0
|
存储 Swift
SwiftUI极简教程41:使用Segment、LazyVGrid和ImagePicker构建一个Logo生成器
在本章中,你将学会使用Segment分段器、LazyVGrid垂直网格、ImagePicker图片选择器构建一个Logo生成器。 在上一章中,我们完善了SearchBar搜索栏、TabView底部导航,还有做了一个Loading加载动作。最近突然有个想法,如果把色卡和图片进行组合,这不就是一个简单的Logo了吗?我能不能做个Logo生成器? 说干就干,我们继续完成App的相关内容。
926 0
SwiftUI极简教程41:使用Segment、LazyVGrid和ImagePicker构建一个Logo生成器
|
11月前
|
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到崖山分布式
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
429 32
|
11月前
|
编解码 监控 虚拟化
Hyper分辨率优化技术,怎么使得虚拟机中的图形应用能够以更高的清晰度呈现
Hyper分辨率优化技术通过增强虚拟机的图形处理能力,显著提升图像清晰度和视觉体验,适用于图形设计、视频编辑等场景。该技术依赖于虚拟机的硬件配置、显卡驱动及显示设置,确保高分辨率内容的最佳呈现。使用时需合理设置分辨率,定期更新驱动并监控性能,以实现最佳效果。
|
9月前
|
人工智能 监控 API
全网跪求的抢票神器!用 CodeBuddy 联动魔搭 MCP,我把 12306 抢票系统玩明白了
CodeBuddy 作为智能编程领域的佼佼者,无需用户具备深厚的编程知识,就能依据用户需求迅速生成高效代码。在票务信息获取方面,它巧妙地构建起与两款 MCP 顺畅交互的桥梁。通过简洁直观的指令输入,CodeBuddy 将用户对票务信息的需求精准转化为机器可理解的语言,为后续获取信息的流程奠定坚实基础。
713 2
|
弹性计算 运维 自然语言处理
产品测评 | 感受操作系统智能助手OS Copilot新功能带来的运维效率飞升
近期,我再次评测了阿里云OS Copilot的新版本,发现其在命令执行、任务自动化、文件处理及知识问答等方面表现出色,特别是-t参数显著提升了70%的效率。使用过程中,我发现它不仅简化了复杂任务的处理,还提供了中文解释配置文件的功能,极大地方便了初学者。总结来看,OS Copilot极大地提升了Linux运维效率,但仍需在自然语言理解、用户界面优化和错误处理机制等方面进一步改进。未来若能支持更多操作系统并集成更多实用工具,必将成为Linux用户的得力助手。
|
存储 JSON 缓存
【网络原理】——HTTP请求头中的属性
HTTP请求头,HOST、Content-Agent、Content-Type、User-Agent、Referer、Cookie。
|
API 开发者
微信native支付对接案例详解
本文详细介绍了微信Native支付的对接流程,包括效果展示、产品介绍、接入前准备、开发指引、API列表、支付通知等,并强调了只有通过微信认证的服务号才能对接微信支付。每年需支付300元认证费用。
552 3
|
消息中间件 存储 Java
MQ线上消息乱序问题处理及场景详解
【11月更文挑战第22天】在现代分布式系统中,消息队列(MQ)作为核心组件,承担着异步处理、削峰填谷和系统解耦的重任。
845 1