SmartUpload上传专题:http://thousandzhang.iteye.com/blog/444637
2M
|
第1次
|
第2次
|
第3次
|
第4次
|
平均
|
Cos
|
297
|
203
|
234
|
245
|
245
|
FileUpload
|
281
|
312
|
281
|
312
|
297
|
SmartUpload
|
531
|
594
|
485
|
532
|
536
|
20M
|
第1次
|
第2次
|
第3次
|
第4次
|
平均
|
Cos
|
2562
|
2109
|
2719
|
2172
|
2391
|
FileUpload
|
4062
|
4140
|
5360
|
3922
|
4371
|
SmartUpload
|
3453
|
3094
|
3078
|
3547
|
3293
|
45M
|
第1次
|
第2次
|
第3次
|
第4次
|
平均
|
Cos
|
4860
|
4844
|
5125
|
5171
|
5000
|
FileUpload
|
9000
|
8391
|
10375
|
10078
|
9461
|
SmartUpload
|
8265
|
9187
|
8672
|
8856
|
8745
|
200M
|
第1次
|
第2次
|
第3次
|
第4次
|
平均
|
Cos
|
55813
|
52282
|
54796
|
51187
|
53520
|
FileUpload
|
76343
|
68531
|
80954
|
79031
|
76215
|
SmartUpload
|
内存堆栈溢出
|
|
|
|
|
从上述的表格对比中可以看出Cos始终保持着良好的性能。在上传量较小(容量<2M,这是最常出现的情况)时,Cos比FileUpload性能并没有好很多,但SmartUpload就已经开始显出弱势。
随着容量的增大,FileUpload和SmartUpload的性能下降非常快,直到200M容量时,SmartUpload已经不堪重负崩溃了,而Cos此时的花费时间比FileUpload少了20多秒,不能不说在本次的评测中,Cos的性能位居第一。
通过对三种流行的上传组件进行对比,我认为选用Cos是比较好的。在实际的项目中,可以把上传的文件放到文件夹,文件路径存于数据库中以便于管理。
如果需要把文件上传到数据库也很简单,从Cos中已经得到了上传文件(java.io.File),其后的操作很平常所做的一样: 通过File得到inputStream,存到数据库的blob或Clob字段即可。
对于使用Struts的项目,我觉得还是使用FileUpload比较好,因为Struts天生集成了FileUpload的功能,使用FileUpload会带来很多的便利。而如果想要开发独立的上传组件,则用Cos是最好的选择,可以在Cos的基础上封装一层,暴露给业务程序员的只是一些简单易用的API,而且可以给这些API加上自定义的javaDoc,这对于实际的开发和将来的扩展都是非常方便的。
下面对FileUpload的上传机制作一些分析,基本上,上传一个文件的过程在FileUpload中可以分为三个部分:
1.由客户端把要上传的文件生成request数据流,与服务器端建立连接
2.在服务器端接收request流,将流缓存到内存或磁盘中(具体缓存到什么地方,将由DiskFileUpload的setSizeThreshold(int cacheMax)方法来决定,当文件大小<cacheMax时,文件将被缓存到内存,否则将被缓存到磁盘的临时文件)
3.由服务器端的内存或是临时文件中把文件输出到指定的目录(这个目录才是指定的文件上传目录).
上述的第一步由浏览器完成,不用过多理会,重点是第二和第三步。
第二步时,由DiskFileUpload的parseRequest(...)方法(其实这个方法是继承于FileUploadBase类,真正起解析request流作用的类是FileUploadBase)解析request流。在parseRequest(...)方法中,新建了一个MultipartStream实例,由此实例的readBodyData()方法将上传文件的流读到FileItem实例中,FileItem实例根据设置好的cacheMax大小,引用一个内存中的数据流或是一个磁盘上的数据流,注意此时文件已经上传到了服务器,但仍然没有传到设定的上传目录。
第三步时,调用FileItem实例的write(File file)方法,将已经存在于内存或是磁盘上的上传文件流拷贝到设定好的上传目录,至此上传仍未结束,因为磁盘中很可能保存了上传文件的临时文件(当设定的cacheMax<文件大小时),如何删除这些临时文件?有两种方法:1.显示调用FileItem实例的delete()方法。2.不调用任何方法,当FileItem被垃圾回收时,由finalize()方法删除临时文件。
分享到:
相关推荐
本主题将深入探讨两种常见的Java上传组件——SmartUpload和Commons-Fileupload。 SmartUpload是一个强大的Java上传组件,由Julien DROUET开发,它为JSP和Servlet提供了方便的文件上传功能。SmartUpload提供了一套...
java 文件上传(包括struts2文件上传,smartupload,基于apatch 的fileupload的文件上传):该文件包括文件上传的多个实例:有基于strtus2自带的文件上传实例、smartupload文件实例 和基于aptche自带的fileupload 的...
1、利用org.apache.commons.fileupload编写的文件上传和下载的前台和后台代码,前台代码是Jsp,后台是用servlet处理,共2个例子,各有不同,比较使用; 2、有用jspSmartupload制作一个文件上传和下载的例子,其制作...
总结,本教程涵盖了使用Apache Commons FileUpload库在Java Web环境中实现文件上传的基本步骤,包括在Servlet和Struts1/2框架下的应用。通过学习和实践这些知识点,开发者可以有效地处理用户的文件上传请求,为应用...
在这个"FileUpLoad"项目中,开发者使用了Struts2框架来处理用户请求,Oracle数据库存储文件元数据,通过流(Stream)优化下载速度,并且实现了上传和下载的功能,非常适合初学者进行学习和实践。 首先,文件上传在...
"Java上传的通用代码包括(jspsmartupload, fileupload)"这个标题提到的两个库——JSPSmartUpload和FileUpload,都是用于处理文件上传的Java库,它们为开发者提供了方便的API来实现这一功能。 1. **JSPSmartUpload**...
在标题"java文件上传commons-fileupload-1.2"中,`1.2`指的是`Commons FileUpload`的版本号,这表明我们将讨论的是该库的一个特定历史版本。 文件上传在Web应用中扮演着关键角色,例如用户可能需要上传照片、文档或...
Java中的文件上传是Web开发中常见的一项功能,用于接收客户端上传的数据,比如图片、文档等。Apache Commons FileUpload 是一个非常实用的库,专门用于处理HTTP请求中的多部分数据,也就是我们常说的多文件上传。这...
本人亲自使用cos,smartupload,fileupload做的文件上传得小例子,只用了基本功能,注释非常详细,一看就能学会。测试时请使用图片上传,以便达到最佳效果。转载请注明原作者名,请珍惜他人劳动成果。
SmartUpload和FileUpload适用于处理本地服务器的文件上传,而COS更适合于处理云端文件的存储与下载。根据项目需求,开发者可以选择合适的组件来满足用户的需求,比如,如果项目需要处理大量文件,并且希望将文件存储...
Java文件上传组件包(FileUpload)是Apache软件基金会的一个开源项目,主要负责处理HTTP协议中的文件上传功能。这个组件在Web应用开发中扮演着重要角色,尤其在处理用户通过表单上传大文件时,提供了高效且灵活的...
在Java编程中,文件上传是一项常见的任务,尤其是在Web应用...通过以上步骤,你就可以使用Apache Commons FileUpload库在Java Web应用中实现文件上传功能。这是一个基础的实现,具体实现可能需要根据项目需求进行调整。
在Java Web开发中,文件上传是一项常见的功能,Apache Commons FileUpload和Smart Upload是两个常用的文件上传组件。这里我们将深入探讨这两个库以及如何在实际项目中使用它们。 首先,Apache Commons FileUpload是...
Java 组件 SmartUpload 和 FileUpload 实现文件上传功能 本文主要介绍了 Java 组件 SmartUpload 和 FileUpload 实现文件上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。 SmartUpload 上传组件 ...
### smartupload文件上传功能详解 #### 一、smartupload组件概览 ...总之,smartupload组件为Java Web应用提供了强大的文件上传功能,通过合理的配置和编码实践,可以轻松实现安全、高效的文件上传操作。
在这个"C# .NET FileUpload 多文件上传例子"中,我们将探讨两种主要的方法,帮助你理解和掌握这一关键功能。 首先,我们要知道ASP.NET中的`<asp:FileUpload>`控件是实现文件上传的核心组件。它可以允许用户从本地...
"性能最好的Java文件上传组件"是指一种优化了上传速度和资源消耗的工具,它能够有效地处理大文件上传、多文件并发上传等问题,提高应用的用户体验。在这个场景中,我们提到了基于"COS"的Java文件上传组件。COS通常指...
下面我们将详细介绍使用FileUpload组件实现文件上传功能的步骤和要点: 首先,需要引入两个jar包:commons-fileUpload.jar和commons-io.jar。然后,需要创建工厂类DiskFileItemFactory,用于创建FileItem对象。...
然后,使用`PutObjectRequest`创建上传请求,指定存储桶名和文件路径。最后,调用`COSClient.putObject(request)`执行上传操作。 6. **错误处理和安全性**:在处理文件上传时,要确保检查文件类型和大小,防止恶意...
利用org.apache.commons.fileupload编写的文件上传和下载的前台和后台代码,共两个例子,个有不同,费用使用。另有用jspSmartupload制作一个文件上传和下载的例子,其制作的例子能够上传到数据库中。