<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Hibernate進行時

    有關Hibenrate及其相關工具的主頁
    隨筆 - 0, 文章 - 16, 評論 - 29, 引用 - 0
    數據加載中……

    FileUpload的學習筆記

    近兩天來由于項目需要使用上傳組件,于是我仔細分析了Cos和FileUpload的源代碼,并對它們的性能進行了測試比較,使用2M20M45M200M的上傳大小測試三種組件所花費的時間(單位為ms結果是:

    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,這是最常出現的情況)時,CosFileUpload性能并沒有好很多,但SmartUpload就已經開始顯出弱勢。

       隨著容量的增大,FileUploadSmartUpload的性能下降非常快,直到200M容量時,SmartUpload已經不堪重負崩潰了,而Cos此時的花費時間比FileUpload少了20多秒,不能不說在本次的評測中,Cos的性能位居第一。

    通過對三種流行的上傳組件進行對比,我認為選用Cos是比較好的。在實際的項目中,可以把上傳的文件放到文件夾,文件路徑存于數據庫中以便于管理。

       如果需要把文件上傳到數據庫也很簡單,從Cos中已經得到了上傳文件(java.io.File),其后的操作很平常所做的一樣:  通過File得到inputStream,存到數據庫的blobClob字段即可。

       對于使用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()方法刪除臨時文件。







    posted on 2006-02-15 17:44 caixuetao 閱讀(3860) 評論(6)  編輯  收藏

    評論

    # re: FileUpload的學習筆記  回復  更多評論   

    請問FileUpload如何讀取提交頁面的INPUT TYPE=TEXT 的字段信息??謝謝
    2006-08-28 10:58 | T

    # re: FileUpload的學習筆記  回復  更多評論   

    非常好,正是我想看到的 thank you
    2006-12-25 18:05 | johns

    # re: FileUpload的學習筆記  回復  更多評論   

    在用fileupload上傳文件時,在服務器端取到的request流中用Part對象來表述表單域,
    if (part.isParam()) {// 處理普通參數
    ParamPart paramPart = (ParamPart) part;
    String value = paramPart.getStringValue();
    paras.put(name, value);// 把普通參數加入paras這個Map(之前new了一個Map出來,用于保存普通參數)
    log.info("param: name=" + name + "; value=" + value);
    } else if (part.isFile()) {//處理文件
    FilePart filePart = (FilePart) part;
    //怎么處理調用FilePart就行了
    }
    2007-01-10 10:16 | 蔡雪燾

    # re: FileUpload的學習筆記[未登錄]  回復  更多評論   

    <script>
    alert("zzz")
    </script>
    2007-11-09 14:15 | zz

    # re: FileUpload的學習筆記  回復  更多評論   

    A nice job you have done!
    2008-01-02 15:15 | NeoWander

    # re: FileUpload的學習筆記  回復  更多評論   

    謝謝lz的實踐給我們后來者節省了時間。
    2008-08-14 17:01 | sunchuanfu

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产美女无遮挡免费网站| 日本妇人成熟免费中文字幕| 国产一级做a爱免费视频| 亚洲中文字幕无码mv| 国产99视频精品免费观看7| 亚洲日韩乱码中文无码蜜桃| 亚洲精品视频在线免费| 亚洲日韩乱码中文无码蜜桃臀| 日韩免费一区二区三区在线| 亚洲av一本岛在线播放| 香蕉高清免费永久在线视频| 自拍偷自拍亚洲精品播放| 国产一区二区三区免费视频| 免费一级做a爰片久久毛片潮| 亚洲午夜福利精品久久| a级午夜毛片免费一区二区| 亚洲国产精品久久久久| 777成影片免费观看| 亚洲人成综合在线播放| 日本无吗免费一二区| 一个人晚上在线观看的免费视频 | 国产精品亚洲专区一区| 亚洲五月午夜免费在线视频| 无码人妻久久一区二区三区免费| 久久丫精品国产亚洲av不卡| 免费看韩国黄a片在线观看| 国产亚洲精品91| 亚洲国产综合无码一区| 国产精品成人观看视频免费| 国产精品无码亚洲精品2021| 国产亚洲美女精品久久久2020| 精品无码国产污污污免费网站| 亚洲欧美日本韩国| 国产亚洲色婷婷久久99精品| 成人AV免费网址在线观看| 日亚毛片免费乱码不卡一区 | 全免费一级午夜毛片| 一区二区三区免费电影| 亚洲国产成人资源在线软件| 一本久久综合亚洲鲁鲁五月天| 免费在线观看一级片|