java各种上传技术 分析报告

工程下载:

http://woshiyinbin.iteye.com/admin/blogs/1859968

Jsp下测试数据(单位ms

 

1.6 mb

 

第一次

第二次

第三次

第四次

第五次

smartupload

40

40

55

45

40

fileupload

120

180

110

110

110

cos

60

60

55

50

50

javazoom

246

266

312

300

296

 

 

10 mb

 

第一次

第二次

第三次

第四次

第五次

smartupload

385

335

370

355

325

fileupload

665

696

650

631

630

cos

330

340

305

330

315

javazoom

705

675

695

685

675

 

28 mb

 

第一次

第二次

第三次

第四次

smartupload

1375

1000

982

1045

fileupload

1695

1785

1535

2470

cos

813

790

655

765

javazoom

1670

1781

1826

1771

 

74 mb smartupload溢出)

 

第一次

第二次

第三次

fileupload

3952

8515

9792

cos

2175

2069

2060

javazoom

4578

5007

9491

 

200+  mb smartupload溢出)

 

第一次

fileupload

17000

cos

8327

javazoom

33651

 

结论:

1.小文件,如10M以下的,cossmartupload比较优越,超过10Mcos要优于smartupload

2.大文件估计超过50Msmartupload就会出现内存溢出这样的情况

3.fileupload javazoom 性能上面相差不大

缺点:

1.不方便调试


Servlet下测试数据(单位 ms

 

1.6 mb

 

第一次

第二次

smartupload

98

101

fileupload

95

100

cos

53

57

javazoom

361

280

 

10 mb

 

第一次

第二次

smartupload

365

500

fileupload

747

816

cos

351

336

javazoom

912

742

 

28 mb

 

第一次

第二次

smartupload

1339

1179

fileupload

1389

1902

cos

908

840

javazoom

6918

6981

 

74 mb smartupload溢出)

 

第一次

第二次

fileupload

10822

14689

cos

2406

2492

javazoom

10490

5264

 

结论:

       1.和上面jsp对比,性能上面稍微有点缺损,这种缺损的价值还是值得,现在代码可以在servlet里面处理,方便调试

Struts 下测试数据(单位ms

1.6 mb

 

第一次

第二次

第三次

fileupload

52

58

38

javazoom

39

44

49

 

10 mb

 

第一次

第二次

第三次

fileupload

220

242

229

javazoom

219

226

248

 

28 mb

 

第一次

第二次

第三次

fileupload

630

617

611

javazoom

595

605

628

 

74 mb

 

第一次

第二次

第三次

fileupload

1682

1797

1790

javazoom

1821

1622

1627

 

结论:

1.       性能上更加优化,比前两者的性能更好

2.       而且代码是在struts里面写的,和其他的框架方便整合

3.       如果需要换底层,比如fileupload 2.0或者javazoom,只需要修改配置文件

4.       底层使用 fileuploadjavazoom性能上差不多,但javazoom要略优一些

5.       强调fileupload 2.0,是因为struts默认用的1.0,而且部分方法已经过时了

 

缺点:

1.       复杂度高,其他框架在struts里面不能使用,因为在经过action之前,request的流对象会被拦截,MultipartRequestHandler 会把里面流取出来,所以在action中再取出流会取不到,会抛异常,所以必须要自己实现MultipartRequestHandler接口。

2.       javazoom底层是把cos集成进来了,但速度上还是没有集成cos的优点,他和fileupload一样属于比较成熟的组件,API比较多,使用起来比较方便。

3.       如果底层换用cos,会遇到很多问题,必须对cos更深入的研究

 

改进:

1.       对比jspservlet,会发现cos的性能要优于fileuploadjavazoom,如果struts底层换cos,性能可能比这要快。


前面的例子在包里面都有,而且使用简便,看下例子就明白了

 

介绍 MultipartRequestHandler实现这部分的结构

 

这代码主要在handler包里面,base包下的BaseMultipartRequestHandler实现了MultipartRequestHandler所有接口(除了handleRequest方法),JavaZoomHandlerCommonsFileUploadHandler继承BaseMultipartRequestHandler类,实现自己的handleRequest方法。

 

类里面有三个成员

elementsAll:存放所有从流中获取到得对象,包括elementsFileelementsText

elementsFile:获取流中的FileItem

elementsText:获取流中普通字段

 

handleRequest(HttpServletRequest request)

主要将拦截到的request中的流取出来,然后调用对应的addFileParameteraddTextParameter

 

addFileParameter(FileItem item)

       主要将流中的FileItem取出来,将值塞入elementsAllelementsFile

 

addTextParameter(HttpServletRequest request,Object)

       主要将流中的普通字段取出来,将值塞入elementsAllelementsText

 

class CommonsFormFile implements FormFile, Serializable

       将底层的File取出的对象,封装成FormFile

 

注意:

1.  当使用Commsfileupload

Jsp:

<input type="file" name="files" />

<input type="file" name="files" />

<input type="file" name="files1" />

<input type="file" name="files1" />

 

ActionForm:

    声明:

    List<FormFile> files

    List<FormFile> files1

 

一定要用List,不能用数组或者set,底层就是这样封装的。


 

2.当时用javazoom

Jsp:

<input type="file" name="files" />

<input type="file" name="files1" />

<input type="file" name="files3" />

<input type="file" name="files1" />

 

ActionForm:

    声明:

    List<FormFile> files

 

    Jsp上面的name可以随便取名字,但一定要有name这个属性,而且在ActionForm里面,只能用files,不能用其他的比如files1files3,因为底层把所有的FormFile放在这个list里面

你可能感兴趣的:(java各种上传技术 分析报告)