Smartupload和commons-fileupload介紹與比較

來源:互聯網
上載者:User
比較
WEB檔案上傳可能是網站建設中最常用的功能之一,我在項目開發中幾乎都需要實現檔案上傳功能.前段時間自己搜集了一些上傳組件.這篇文章中將介紹這些組件的使用方法,並且比較各自的優劣.

一,smartupload組件.

我想只要做個檔案上傳的朋友都知道這個組件,我認識的人中使用最多的也是它!我剛到公司的時候,公司也使用的smartupload,這個組件上傳相對較小的檔案時是個不錯的選擇.下面給出個使用的例子:

  <%@ page contentType="text/html;charset=gb2312"%><%@ page import="java.sql.*"%><%@ page import="com.jspsmart.upload.*" %>

<%   //執行個體化上傳bean    SmartUpload mySmartUpload=new SmartUpload();    //初始化    mySmartUpload.initialize(pageContext);     //設定上傳的最大值,注意:如果這裡設定過大會出現問題!    mySmartUpload.setMaxFileSize(500 * 1024*1024);    //上傳檔案    mySmartUpload.upload();   //迴圈取得所有上傳的檔案   for (int i=0;i<mySmartUpload.getFiles().getCount();i++){   //取得上傳的檔案   com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(i);   if (!myFile.isMissing())    {   //取得上傳的檔案的檔案名稱    String myFileName=myFile.getFileName();    //取得不帶尾碼的檔案名稱    String  suffix=myFileName.substring(0,myFileName.lastIndexOf('.'));    //取得尾碼名    String  ext= mySmartUpload.getFiles().getFile(0).getFileExt();      //取得檔案的大小      int fileSize=myFile.getSize();    //儲存路徑    String aa=getServletContext().getRealPath("/")+"jsp\\";    String trace=aa+myFileName;    //取得別的參數    String explain=(String)mySmartUpload.getRequest().getParameter("text");    String send=(String)mySmartUpload.getRequest().getParameter("send");    //將檔案儲存在伺服器端     myFile.saveAs(trace,mySmartUpload.SAVE_PHYSICAL);    %>

但是使用smartupload上傳過大檔案,或者多檔案的時候可能出現CPU或記憶體佔用過高的問題.並且:只有重新啟動容器才能恢複正常!這正是我最後我放棄了使用smartupload的原因.

二,commons-fileupload組件

這個組件是我現在使用的組件,下載地址:http://jakarta.apache.org/site/downloads/downloads_commons-fileupload.cgi,包內包含了API文檔.

使用該組件的例子:

<%@ page language=“java”contentType=“text/html;charset=GBK”%><%@ page import=“java.util.*”%><%@ page import=“org.apache.commons.fileupload.*”%><html><head><title>檔案上傳</title></head><% DiskFileUpload fu = new DiskFileUpload(); // 設定允許使用者上傳檔案大小,單位:位元組 fu.setSizeMax(10000000); // 設定最多隻允許在記憶體中儲存的資料,單位:位元組 fu.setSizeThreshold(4096); // 設定一旦檔案大小超過getSizeThreshold()的值時資料存放在硬碟的目錄 fu.setRepositoryPath(“D:\\Tomcat5\\TEMP”); //開始讀取上傳資訊 List fileItems = fu.parseRequest(request); // 依次處理每個上傳的檔案 Iterator iter = fileItems.iterator(); while (iter.hasNext()) {  FileItem item = (FileItem) iter.next();  //忽略其他不是檔案域的所有表單資訊  if (!item.isFormField()) {   String name = item.getName();   item.write(“D:\\UploadTest\\”+ name); }}%>

從上面的程式可以看出,該組件上傳時候可以用了一個地方來儲存臨時檔案,呆上傳完成後直接把檔案寫過去.這樣就不會佔用過多的記憶體!而且該組件上傳大檔案的時候效率也不低哦!

在這兩個的對比選擇中,我選擇了後者,因為我做的項目中經常上傳大於10M的檔案,用前者的時候伺服器幾乎被整崩潰.

不過,現在我已經不用這兩種組件了,因為http方式傳檔案效率始終很低,我們現在使用的是web方式實現的ftp檔案上傳,我將在下篇文章中寫我在項目中是如何?的.


相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。