如何实现文件上传
??? 如何实现文件上传
?????? 开发Web程序通常需要文件上传功能,现在有很多免费的文件上传组件,其中使用比较多的也是非常著名的有:
?????? FileUpload??? (http://jakarta.apache.org/site/downloads/downloads_commons-fileupload.cgi)
?????? Cos ????????? ??? (http://www.servlets.com/cos/index.html) 基于javabean组件
????? SmartUpload? (http://wwww.jspsmart.com) 完全基于JSP来处理上传的组件????????
????? 以下部分内容来自http://www.blogjava.net/caixuetao/articles/30841.html)
???? 它们的性能比较如下:
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,这对于实际的开发和将来的扩展都是非常方便的。
以下使用cos组件简单的实现文件上传功能:
1.???????? 将下载的cos.jar文件所在目录加入到环境变量classpath中<o:p></o:p>
1 楼 Cecily 2007-03-07 <font>呵呵? 总结的很仔细啊 支持一下.我用SmartUpload做上传的时候确实觉得不好用于大数据量的传输.</font> 2 楼 ddandyy 2007-03-07 那堆框是怎么回事 3 楼 LucasLee 2007-03-07 我觉得总结的有一些疑问。
- <%@?page?language=“java”contentType=“text/html;charset=GBK”%> ??
- <%@?page?import=“java.util.*”%> ??
- <%@?page?import=“org.apache.commons.fileupload.*”%> ??
- <html> ??
- <head> ??
- <title>文件上传</title> ??
- </head> ?&nbs
上传文件不仅是耗时问题,还有一个耗内存的问题,这一点在大文件处理时很重要。
似乎没有考虑,如果考虑这一点,可能那个处理时间也有变化了。 4 楼 ahuaxuan 2007-03-07 这个测试结果是不是有点误导人,不同的服务器应该是不一样的,这个测试是在什么服务器上做的? 服务器的最大内存设置是多少?这些最起码应该给出来,这样才全面一点 5 楼 NoName 2007-03-26 首先还是表示感谢,顶一下,Cos 以前没听说过,这下又多了个选择 6 楼 cozone_柯中 2007-03-27 NoName 写道首先还是表示感谢,顶一下,Cos 以前没听说过,这下又多了个选择
确实,支持以下 7 楼 andyandyandy 2007-03-27 以前都用fileupload,有机会看看cos,不知道lz测试的机器配置怎么样 8 楼 huangtut 2007-05-08 <br/>
<strong>Cecily 写道:</strong><br/>
<div class='quote_div'><font>呵呵? 总结的很仔细啊 支持一下.我用SmartUpload做上传的时候确实觉得不好用于大数据量的传输.</font></div>
<p>?</p>
<p>?</p>
<p>支持一下,以前一个项目smartUpload大于20M时经常出现无响应的状况,的确让人苦恼。<br/>
<br/>
<br/>
<br/>
</p> 9 楼 penghao122 2007-05-08 为什么有时候用smartUpload内存会100%呢