FileUpload文件上传_list<fileitem> items = fileupload. parserequest(re-程序员宅基地

技术标签: JAVAEE  FileUpload文件上传  

1.进行文件上传时,表单需要做的准备:
1).请求方式为POST:<form action="uploadServlet" method="post"....>
2).使用file的表单域:<input type="file" name="file" />
3).请求的编码方式:<form action="uploadServlet" method="post" enctype="multipart/form-data">
表单以二进制传输数据

 

<form action="uploadServlet" method="post" enctype="multipart/form-data">
	File:<input type="file" name="file" 	/><br>
	<input type="submit" 	 value="Submit"/>
</form>

2.服务端:
1).不能再使用request.getParameter()等方式获取请求信息。获取不到,因为请求的编码方式已经改为multipart/form-data,
以二进制的方式来提交请求信息。
2).可以使用输入流的方式来获取。但不建议这样做。
3).具体使用commons-fileupload组件来完成文件的上传操作。
搭建环境:
①.加入commons-fileupload-1.3.3.jar
commons-io-2.6.jar
②.基本思想:
*commons-fileupload 可以解析请求,得到一个FileItem对象组成的List
*commons-fileupload 把所有的请求信息都解析为FileItem对象,无论是一个一般的文本域还是一个文件域。
*可以调用FileItem的isFormField()方法来判断是一个表单域或不是表单域(则是一个文件域)
*再来进一步获取信息

 

	if (item.isFormField()) {
	    String name = item.getFieldName();
	    String value = item.getString();
	    ...
	}

如果是一个多选,如何获取对应的字符串数组:每一个都对应一个FileItem对象。

 

	<input type="checkbox" name="interesting" value="Reading"/>Reading
	<input type="checkbox" name="interesting" value="Party"/>Party
	<input type="checkbox" name="interesting" value="Shopping"/>Shopping
			

 

if (!item.isFormField()) {
	    String fieldName = item.getFieldName();
	    String fileName = item.getName();
	    String contentType = item.getContentType();
	    boolean isInMemory = item.isInMemory();
	    long sizeInBytes = item.getSize();
	   
	    InputStream uploadedStream = item.getInputStream();
	    ...
	    uploadedStream.close();
	}

③.如何得到List<FileItem>对象
>简单的方式

// Create a factory for disk-based file items
	DiskFileItemFactory factory = new DiskFileItemFactory();
	
	// Configure a repository (to ensure a secure temp location is used)
	ServletContext servletContext = this.getServletConfig().getServletContext();
	File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
	factory.setRepository(repository);
	
	// Create a new file upload handler
	ServletFileUpload upload = new ServletFileUpload(factory);
	
	// Parse the request
	List<FileItem> items = upload.parseRequest(request);	

>复杂的方式:可以为文件的上传加入一些限制条件和其他的属性。

	// Create a factory for disk-based file items
	DiskFileItemFactory factory = new DiskFileItemFactory();
	
	//设置内存中最多可以存放的上传文件的大小,若超出则把文件写到一个临时文件夹中。以byte为单位
	factory.setSizeThreshold(yourMaxMemorySize);
	//设置那个临时文件夹
	factory.setRepository(yourTempDirectory);
	
	// Create a new file upload handler
	ServletFileUpload upload = new ServletFileUpload(factory);
	
	// 设置上传的文件的总的大小。也可以设置单个文件的大小。
	upload.setSizeMax(yourMaxRequestSize);
	
	// Parse the request
	List<FileItem> items = upload.parseRequest(request);

3.使用fileupload组件完成文件的上传应用
1).需求:
①.上传
>在upload.jsp页面上使用jQuery实现“新增一个附件”,“删除附件”。但至少需要保留一个
>对文件的扩展名和文件的大小进行验证,一下的规则是可配置的,而不是写死在程序中的
>>文件的扩展名必须为.pptx,docx,doc
>>每个文件的大小不能超过1M
>>总的文件大小不能超过5M。
>若验证失败,则在upload.jsp页面上显示错误消息:
>>若某一个文件不符合要求:xxx文件拓展名不合法或xxx文件大小超过1M
>>总的文件大小不能超过5M
>若验证通过,则进行文件的上传操作
>>文件上传,并给一个不能和其他文件重复的名字,但拓展名不变
>>在对应的数据表中添加一条记录。

 

	<script type="text/javascript">	
	$(function () {
		//1.获取#addFile,并为其添加click响应函数
		var i=2;
		$("#addFile").click(function () {
			//2.利用jQuery生存城一下节点,注意数字的变化,并把他们放在#br的前面
			//其中“删除”按钮可以删除当前的file和desc相关节点
			/*
			File1:<input type="file" name="file1" 	/>
			<br>
			Desc1:<input type="text" name="desc1" /><button>删除</button>
			<br>
			*/
			
			$("#br").before("<div>File"
					+i+":<input type='file' name='file"
					+i+"'/><br>Desc"
					+i+":<input type='text' name='desc"
					+i+"'/><input type='button' value='删除' id='button' /><br><br></div>")
					.prev("div").find("#button").click(function(){
						$(this).parent("div").remove();
						i--;
						
					});
			i++;
			
		});
		
	});	
</script>		

4.如何修改小工具或框架的源代码?
1).原则:能不修改就不修改。
2).修改的方法:
>修改源代码,替换jar包中对应的class文件。
>在本地新建相同的包,和类,在这个类中修改即可。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36068521/article/details/80219882

智能推荐

easyUI添加tree菜单_easyui tree增加-程序员宅基地

文章浏览阅读189次。treeData编辑形式:treeData=[{ text : "一级标题", children : [{ text : "二级标题", children : [{ text : "二级标题", ..._easyui tree增加

Java常用工具包 Jodd-程序员宅基地

文章浏览阅读410次。Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架。简单,却很强大!写道Jodd = Tools + IoC + MVC + DB + AOP + TX + JSON + HTML &lt; 1.5 MbJodd 被分成众多模块,按需选择,其中工具类模块有:jodd-core 一些工具类,包括Printf、JDateTim..._jodd.util属于jodd什么模块

Botnet僵尸网络:可怕而无声的网络罪犯-程序员宅基地

文章浏览阅读480次。  调查局在最近的一份报告中指出2010年是僵尸网络(Botnet)年,全球遭遇攻击数量中僵尸网络名列第一。不久前,台湾当局就破获了一起国家级的僵尸网络;该僵尸网络连接台湾的主控台(CNC),以2万多个病毒,对30多个国家同时发动拒绝式服务的攻击。  僵尸网络(Botnet)到底是怎么发动攻击的?以下这篇深入剖析文章是由趋势科技Sr.Dev Manager Arther Wu所撰写。..._botnet c& c domain专杀

编译Linux内核出现include/linux/compiler-gcc.h:106:30: fatal error: linux/compiler-gcc5.h错误_include/linux/compiler-gcc.h:114:1: fatal error: l-程序员宅基地

文章浏览阅读1.9w次,点赞2次,收藏8次。编译Linux内核出现include/linux/compiler-gcc.h:106:30: fatal error: linux/compiler-gcc5.h:No such file or directory错误当前学习linux内核编译,就是把当前系统的内核更换,在进行编译的时候出现了下面的错误,搜索了很多资料,有很多人回答时候文不对题,为了解决这个问题,我在这里做一个笔记: 错误截图_include/linux/compiler-gcc.h:114:1: fatal error: linux/compiler-gcc9.h: no s

Java中定时任务的6种实现方式,你知道几种?_implements job-程序员宅基地

文章浏览阅读5.6w次,点赞94次,收藏341次。几乎在所有的项目中,定时任务的使用都是不可或缺的,如果使用不当甚至会造成资损。还记得多年前在做金融系统时,出款业务是通过定时任务对外打款,当时由于银行接口处理能力有限,外加定时任务使用不当,导致发出大量重复出款请求。还好在后面环节将交易卡在了系统内部,未发生资损。所以,系统的学习一下定时任务,是非常有必要的。这篇文章就带大家整体梳理学习一下Java领域中常见的几种定时任务实现。线程等待实现先从最原始最简单的方式来讲解。可以先创建一个thread,然后让它在while循环里一直运行着,通过sleep方法_implements job

【ElasticSearch实战】使用 Elastic Stack 简单有效快捷的监控网络资源_connection to backoff-程序员宅基地

文章浏览阅读1.9k次。使用 Elastic Stack 简单有效监控网络资源我们都知道监控web服务和应用的响应性的确是个挑战。随着时间的推移和规模的扩大,能够跟踪这种响应就更加有趣了。设置SLAs, SLOs, and KPIs 不仅需要历史视图,还需要进行分析和预测的能力。由于我们目前在学习ElasticSearch,所以可以基于它的技术栈来实现各种监控,接下来,我们将讨论利用 Heartbeat 和 Elastic Uptime 如何帮助运营团队实现可观察性,并提供大量的管理 web 服务所需的有价值的洞察力。我们将演示_connection to backoff

随便推点

NDN网络学习笔记(一)——NDN基础-程序员宅基地

文章浏览阅读1w次,点赞11次,收藏46次。NDN(Named Data Networking)是用来取代IP张北川:命名数据网络(NDN)_ndn

对数性质的证明_对数的性质证明-程序员宅基地

文章浏览阅读699次。logaM+logaN=logaMNlog_aM + log_aN = log_aMNloga​M+loga​N=loga​MN (1)proof:assume: logaM=m,logaN=nlog_aM = m, log_aN = nloga​M=m,loga​N=nso: am=M,an=N⇒M⋅N=am⋅an=am+na^m = M, a^n = N \Rightarrow M \cdot N = a^m \cdot a^n = a^{m+n}am=M,an=N⇒M⋅N=am⋅an=am+nl_对数的性质证明

java直接读取Zip压缩包内的文件_java读取zip文件-程序员宅基地

文章浏览阅读1.2w次。//zip数据处理public List<Map<String,Object>> readZipFile(String file,ChironUser user) throws Exception { //ZipFile zf = new ZipFile(file); int i=0; List<Map<String,Object&g..._java读取zip文件

HTMLL---HTML中常用标签(文字、注释标签)_每个html标签都有文字吗-程序员宅基地

文章浏览阅读2.3k次。1、文字标签和注释标签 *文字标签和注释标签 -&lt;font&gt;&lt;/font&gt; -属性 *size:文字的大小,取值范围1-7,超出7默认为7 *color:文字的颜色 -两种表示方式 **英文单词:red,green,blue,black,white,yellow,gray **使用十六进制数表示:#ffffff:RGB -代码 : &..._每个html标签都有文字吗

物联网基础:使用EMQ搭建MQTT服务器_emqtt-程序员宅基地

文章浏览阅读2.5k次,点赞5次,收藏24次。1 EMQ介绍EMQ (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器。Erlang/OTP 是出色的软实时(Soft-Realtime)、低延时(Low-Latency)、分布式(Distributed) 的语言平台。MQTT 是轻量的(Lightweight)、发布订阅模式(PubSub) 的物联网消息协议EMQ 项目设计目标是承载移动终端或物联网终端海量 MQTT 连接,并实现在海量物联网设备间_emqtt

位运算,字符串反转(c语言实现)_c语言 字符换翻转位运算-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏2次。C语言1.编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回值value的二进制位模式从左到右翻转后的值。 如: 在32位机器上25这个值包含下列各位: 00000000000000000000000000011001 翻转后:(2550136832) 10011000000000000000000000000000 程序结果返回..._c语言 字符换翻转位运算