風人園

          弱水三千,只取一瓢,便能解渴;佛法無邊,奉行一法,便能得益。
          隨筆 - 99, 文章 - 181, 評論 - 56, 引用 - 0
          數據加載中……

          Smartupload和commons-fileupload介紹與比較

          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文件上傳,我將在下篇文章中寫我在項目中是如何實現的.

          posted on 2006-06-27 10:33 風人園 閱讀(404) 評論(0)  編輯  收藏 所屬分類: Web

          主站蜘蛛池模板: 资阳市| 盐津县| 绥德县| 鹿泉市| 紫云| 茶陵县| 清流县| 沧源| 大理市| 浦城县| 武威市| 东辽县| 寿光市| 贡觉县| 峨边| 镶黄旗| 包头市| 杭州市| 上杭县| 临江市| 喀喇| 疏勒县| 布拖县| 安新县| 新竹县| 西安市| 沙洋县| 土默特右旗| 福鼎市| 双城市| 庆阳市| 濮阳市| 武清区| 纳雍县| 兴化市| 乐都县| 东乌珠穆沁旗| 固镇县| 镇雄县| 本溪| 彰武县|