技术标签: 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文件。
>在本地新建相同的包,和类,在这个类中修改即可。
文章浏览阅读189次。treeData编辑形式:treeData=[{ text : "一级标题", children : [{ text : "二级标题", children : [{ text : "二级标题", ..._easyui tree增加
文章浏览阅读410次。Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架。简单,却很强大!写道Jodd = Tools + IoC + MVC + DB + AOP + TX + JSON + HTML < 1.5 MbJodd 被分成众多模块,按需选择,其中工具类模块有:jodd-core 一些工具类,包括Printf、JDateTim..._jodd.util属于jodd什么模块
文章浏览阅读480次。 调查局在最近的一份报告中指出2010年是僵尸网络(Botnet)年,全球遭遇攻击数量中僵尸网络名列第一。不久前,台湾当局就破获了一起国家级的僵尸网络;该僵尸网络连接台湾的主控台(CNC),以2万多个病毒,对30多个国家同时发动拒绝式服务的攻击。 僵尸网络(Botnet)到底是怎么发动攻击的?以下这篇深入剖析文章是由趋势科技Sr.Dev Manager Arther Wu所撰写。..._botnet c& c domain专杀
文章浏览阅读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
文章浏览阅读5.6w次,点赞94次,收藏341次。几乎在所有的项目中,定时任务的使用都是不可或缺的,如果使用不当甚至会造成资损。还记得多年前在做金融系统时,出款业务是通过定时任务对外打款,当时由于银行接口处理能力有限,外加定时任务使用不当,导致发出大量重复出款请求。还好在后面环节将交易卡在了系统内部,未发生资损。所以,系统的学习一下定时任务,是非常有必要的。这篇文章就带大家整体梳理学习一下Java领域中常见的几种定时任务实现。线程等待实现先从最原始最简单的方式来讲解。可以先创建一个thread,然后让它在while循环里一直运行着,通过sleep方法_implements job
文章浏览阅读1.9k次。使用 Elastic Stack 简单有效监控网络资源我们都知道监控web服务和应用的响应性的确是个挑战。随着时间的推移和规模的扩大,能够跟踪这种响应就更加有趣了。设置SLAs, SLOs, and KPIs 不仅需要历史视图,还需要进行分析和预测的能力。由于我们目前在学习ElasticSearch,所以可以基于它的技术栈来实现各种监控,接下来,我们将讨论利用 Heartbeat 和 Elastic Uptime 如何帮助运营团队实现可观察性,并提供大量的管理 web 服务所需的有价值的洞察力。我们将演示_connection to backoff
文章浏览阅读1w次,点赞11次,收藏46次。NDN(Named Data Networking)是用来取代IP张北川:命名数据网络(NDN)_ndn
文章浏览阅读699次。logaM+logaN=logaMNlog_aM + log_aN = log_aMNlogaM+logaN=logaMN (1)proof:assume: logaM=m,logaN=nlog_aM = m, log_aN = nlogaM=m,logaN=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_对数的性质证明
文章浏览阅读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文件
文章浏览阅读2.3k次。1、文字标签和注释标签 *文字标签和注释标签 -<font></font> -属性 *size:文字的大小,取值范围1-7,超出7默认为7 *color:文字的颜色 -两种表示方式 **英文单词:red,green,blue,black,white,yellow,gray **使用十六进制数表示:#ffffff:RGB -代码 : &..._每个html标签都有文字吗
文章浏览阅读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
文章浏览阅读1.1k次,点赞2次,收藏2次。C语言1.编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回值value的二进制位模式从左到右翻转后的值。 如: 在32位机器上25这个值包含下列各位: 00000000000000000000000000011001 翻转后:(2550136832) 10011000000000000000000000000000 程序结果返回..._c语言 字符换翻转位运算