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方式傳文件效率始終很低,使用SMB效率會高點!

發佈了30 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章