chenjinlong

          smartupload.jar 實(shí)現(xiàn)文件上傳下載

          前臺:
          <form action="uploadimage.jsp" method="post" enctype="multipart/form-data" name="form1">
          <input type="file" name="file">
          <input type="submit" name="Submit" value="上傳">
          </form>
          注意一點(diǎn)就是 enctype 是必須要的,否則會出亂子

          sercice servlet:
          package com.Gavin.tools.fileupload;

          import java.io.IOException;
          import java.sql.SQLException;
          import java.util.Date;
          import javax.servlet.ServletException;
          import javax.servlet.http.HttpServlet;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          import com.jspsmart.upload.File;
          import com.jspsmart.upload.SmartUpload;
          import com.jspsmart.upload.SmartUploadException;

          /**
           * **********************************************
           * @description 本例為上傳照片及照片描述
           * 
          @author Gavin.lee
           * @date Jun 14, 2009    9:18:40 AM
           * 
          @version 1.0
           ***********************************************
           
          */

          public class SmartUploadTest extends HttpServlet {    
              
          public void doGet(HttpServletRequest request, HttpServletResponse response)
                      
          throws ServletException, IOException {
                  
          this.doPost(request, response);
              }

              
              
          public void doPost(HttpServletRequest request, HttpServletResponse response)
                      
          throws ServletException, IOException {

                  String filePath 
          = "front""photo""pic""";
                  String messages
          ="";
                  String forward
          ="";
                  
                  SmartUpload su 
          = new SmartUpload();    
                  
          long maxsize = 2 * 1024 * 1024;                                     // 設(shè)置每個(gè)上傳文件的大小,為2MB
                  String allowedFilesList = "jpg,gif,bmp";
                  String denidFilesList 
          = "exe,bat,jsp,htm,html,,";
                  
                  
          try {
                      su.initialize(
          this.getServletConfig(), request, response);        //初始化
                      su.setMaxFileSize(maxsize);                                     // 限制上傳文件的大小
                      su.setAllowedFilesList(allowedFilesList);                        // 設(shè)置允許上傳的文件類型
                      su.setDeniedFilesList(denidFilesList);   
                      su.upload();                                                    
          // 上傳文件
                      
                      String photoInfo 
          = su.getRequest().getParameter("info");        //必須這樣來獲取request
                      if(photoInfo==null||photoInfo.equals("")){                        //驗(yàn)證照片描述信息,若沒有輸入,則提示輸入照片描述信息
                          messages="請輸入照片描述信息!";
                          forward
          ="/admin/error.jsp";
                      }
          else{
                          File file 
          = su.getFiles().getFile(0);                        // 獲取上傳的文件,因?yàn)橹簧蟼髁艘粋€(gè)文件,所以可直接獲取            
                          if (!file.isMissing()) {                                     // 如果選擇了文件
                              String now = new Date().getTime() + "";                    //獲取當(dāng)前時(shí)間并格式化為字符串
                              String photoAddr=filePath + now + "."+file.getFileExt();        //filePath值
                              
                              file.saveAs(photoAddr,File.SAVEAS_VIRTUAL);            
                          }
          else{
                              messages
          ="請選擇要上傳的文件!";
                              forward
          ="/admin/error.jsp";
                          }
                          
                      }
                      
                  }
          catch (java.lang.SecurityException e){
                      messages
          ="<li>上傳文件失敗!上傳的文件類型只允許為:jpg,gif,bmp</li>";
                      forward
          ="/admin/error.jsp";            
                  }
          catch (SmartUploadException e) {
                      messages
          ="上傳文件失敗!";
                      forward
          ="/admin/error.jsp";
                      e.printStackTrace();
                  }
           catch (SQLException e) {
                      e.printStackTrace();
                  }
                          
                  request.setAttribute(
          "messages",messages);        
                  request.getRequestDispatcher(forward).forward(request, response);
              }


          }


          【下載】
          下載其實(shí)跟我上一篇文章 commons-upload 下載道理所差無幾  http://www.aygfsteel.com/jzone/articles/282086.html
          package com.Gavin.tools.fileupload;

          import java.io.File;
          import java.io.FileInputStream;
          import java.io.IOException;
          import java.io.InputStream;
          import java.io.PrintWriter;

          import javax.servlet.ServletConfig;
          import javax.servlet.ServletException;
          import javax.servlet.http.HttpServlet;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;

          import com.jspsmart.upload.SmartUpload;
          import com.jspsmart.upload.SmartUploadException;

          public class FileDownloadServlet extends HttpServlet {

              
          public void doPost(HttpServletRequest request, HttpServletResponse response)
                      
          throws ServletException {
                  
                  
                  
                  String filename 
          = request.getParameter("file_name");
                  
                  
          if (filename == null)
                      filename 
          = "";
                  
                  filename 
          = filename.trim();

                  InputStream inStream 
          = null;
                  String attchname 
          = "";

                  
          byte[] b = new byte[100];
                  
          int len = 0;
                  
          try {            
                      attchname 
          = getAttachName(filename);    //取得附件的名稱
                      filename = getRealName(request, filename);    //取得附件的全路徑
                      
                      
          if (filename == null{
                          System.out.println(
          "文件不存在,或者禁止下載");
                          
          return;
                      }

                      attchname 
          = toUtf8String(attchname);    //將文件轉(zhuǎn)碼 UTF-8
                      inStream = new FileInputStream(filename);
                      response.reset();    
          //必須reset,否則會出現(xiàn)文件不完整
                      
                      SmartUpload su 
          = new SmartUpload();    // 新建一個(gè)SmartUpload對象
                      
                      su.initialize(
          this.getServletConfig(), request, response);    // 初始化
                      
          // 設(shè)定contentDisposition為null以禁止瀏覽器自動打開文件,
                      
          //保證點(diǎn)擊鏈接后是下載文件。若不設(shè)定,則下載的文件擴(kuò)展名為
                      
          //doc時(shí),瀏覽器將自動用word打開它。擴(kuò)展名為pdf時(shí),
                      
          //瀏覽器將用acrobat打開。
                      su.setContentDisposition(null);            
                      su.downloadFile(filename);        
          // 下載文件            
                      
                      
          //循環(huán)取出流中的數(shù)據(jù) 
                      while ((len = inStream.read(b)) > 0{
                          response.getOutputStream().write(b, 
          0, len);
                      }

                      inStream.close();
                      
                  }
           catch (Exception e) {
                      e.printStackTrace();
                  }

              }


              
          //取得附件的名稱
              public static String getAttachName(String filename) {
                  
          if (filename == null)
                      
          return "";
                  filename 
          = filename.trim();
                  
          int pos = 0;
                  
                  pos 
          = filename.lastIndexOf("""");        
                  
          if (pos > -1{
                      filename 
          = filename.substring(pos + 1);
                  }
                  
                  
                  pos 
          = filename.lastIndexOf("/");        
                  
          if (pos > -1{
                      filename 
          = filename.substring(pos + 1);
                  }

                  
                  pos 
          = filename.lastIndexOf(File.separator);        
                  
          if (pos > -1{
                      filename 
          = filename.substring(pos + 1);
                  }

                  
                  
          return filename;
              }


              
          //UTF8轉(zhuǎn)碼
              public static String toUtf8String(String string) {
                  StringBuffer sb 
          = new StringBuffer();
                  
          for (int i = 0; i < string.length(); i++{
                      
          char c = string.charAt(i);
                      
          if (c >= 0 && c <= 255{
                          sb.append(c);
                      }
           else {
                          
          byte[] b;
                          
          try {
                              b 
          = Character.toString(c).getBytes("utf-8");
                          }
           catch (Exception ex) {
                              System.out.println(ex);
                              b 
          = new byte[0];
                          }

                          
          for (int j = 0; j < b.length; j++{
                              
          int k = b[j];
                              
          if (k < 0)
                                  k 
          += 256;
                              sb.append(
          "%" + Integer.toHexString(k).toUpperCase());
                          }

                      }

                  }

                  String s_utf8 
          = sb.toString();
                  sb.delete(
          0, sb.length());
                  sb.setLength(
          0);
                  sb 
          = null;
                  
          return s_utf8;
              }


              
          //取得下載文件的真實(shí)全路徑名稱
              private String getRealName(HttpServletRequest request, String filename) {
                  
          if (request == null || filename == null)
                      
          return null;
                  filename 
          = filename.trim();
                  
          if (filename.equals(""))
                      
          return null;

                  String filepath 
          = request.getRealPath(filename);
                  
          if (filepath == null)
                      
          return null;
                  File file 
          = new File(filepath);
                  
          if (!file.exists())
                      
          return null;
                  
          return filepath;
              }


              
          public void doGet(HttpServletRequest request, HttpServletResponse response)
                      
          throws ServletException {        
                  
          this.doPost(request, response);
              }


          }




          這篇文章介紹了
          JspSmartUpload的主要類和方法的使用說明,摘自csdn 

          File類   

          這個(gè)類包裝了一個(gè)上傳文件的所有信息。通過它,可以得到上傳文件的文件名、文件大小、擴(kuò)展名、文件數(shù)據(jù)等信息。  

          File類主要提供以下方法:

          1saveAs作用:將文件換名另存。

          原型: public void saveAs(JAVA.lang.String destFilePathName)

          public void saveAs(JAVA.lang.String destFilePathName, int optionSaveAs)

          其中,destFilePathName是另存的文件名,optionSaveAs是另存的選項(xiàng),該選項(xiàng)有三個(gè)值,分別是SAVEAS_PHYSICAL,SAVEAS_VIRTUALSAVEAS_AUTO

          SAVEAS_PHYSICAL表明以操作系統(tǒng)的根目錄為文件根目錄另存文件,

          SAVEAS_VIRTUAL表明以Web應(yīng)用程序的根目錄為文件根目錄另存文件,

          SAVEAS_AUTO則表示讓組件決定,當(dāng)Web應(yīng)用程序的根目錄存在另存文件的目錄時(shí),它會選擇SAVEAS_VIRTUAL,否則會選擇SAVEAS_PHYSICAL

          例如,saveAs("/upload/sample.zip",SAVEAS_PHYSICAL)執(zhí)行后若Web服務(wù)器安裝在C盤,則另存的文件名實(shí)際是c:/uploadsample.zip

          saveAs("/upload/sample.zip",SAVEAS_VIRTUAL)執(zhí)行后若Web應(yīng)用程序的根目錄是webapps/JSPsmartupload,則另存的文件名實(shí)際是webapps/PsmJSartupload/upload/sample.zip

          saveAs("/upload/sample.zip",SAVEAS_AUTO)執(zhí)行時(shí)若Web應(yīng)用程序根目錄下存在upload目錄,則其效果同saveAs("/upload/sample.zip",SAVEAS_VIRTUAL),否則同saveAs("/upload/sample.zip",SAVEAS_PHYSICAL)。建議:對于Web程序的開發(fā)來說,最好使用SAVEAS_VIRTUAL,以便移植。

          2isMissing 作用:這個(gè)方法用于判斷用戶是否選擇了文件,也即對應(yīng)的表單項(xiàng)是否有值。選擇了文件時(shí),它返回false。未選文件時(shí),它返回true

          原型:public boolean isMissing()

          3getFieldName 作用:取HTML表單中對應(yīng)于此上傳文件的表單項(xiàng)的名字。

          原型:public String getFieldName()

          4getFileName 作用:取文件名(不含目錄信息)

          原型:public String getFileName()

          5getFilePathName 作用:取文件全名(帶目錄)

          原型:public String getFilePathName

          6getFileExt 作用:取文件擴(kuò)展名(后綴)

          原型:public String getFileExt()

          7getSize 作用:取文件長度(以字節(jié)計(jì))

          原型:public int getSize()

          8getBinaryData 作用:取文件數(shù)據(jù)中指定位移處的一個(gè)字節(jié),用于檢測文件等處理。

          原型:public byte getBinaryData(int index)。其中,index表示位移,其值在0getSize()-1之間。

          Files  這個(gè)類表示所有上傳文件的集合,通過它可以得到上傳文件的數(shù)目、大小等信息。有以下方法:

          1getCount 作用:取得上傳文件的數(shù)目。

          原型:public int getCount()

          2getFile 作用:取得指定位移處的文件對象File(這是com.JSPsmart.upload.File,不是JAVA.io.File,注意區(qū)分)。

          原型:public File getFile(int index)。其中,index為指定位移,其值在0getCount()-1之間。

          3getSize 作用:取得上傳文件的總長度,可用于限制一次性上傳的數(shù)據(jù)量大小。原型:public long getSize()

          4getCollection 作用:將所有上傳文件對象以Collection的形式返回,以便其它應(yīng)用程序引用,瀏覽上傳文件信息。

          原型:public Collection getCollection()

          5getEnumeration 作用:將所有上傳文件對象以Enumeration(枚舉)的形式返回,以便其它應(yīng)用程序?yàn)g覽上傳文件信息。

          原型:public Enumeration getEnumeration()

          Request  這個(gè)類的功能等同于JSP內(nèi)置的對象Request。只所以提供這個(gè)類,是因?yàn)閷τ谖募蟼鞅韱危ㄟ^Request對象無法獲得表單項(xiàng)的值,必須通過JSPSmartUpload組件提供的Request對象來獲取。

          該類提供如下方法:

          1getParameter 作用:獲取指定參數(shù)之值。當(dāng)參數(shù)不存在時(shí),返回值為null

          原型:public String getParameter(String name)。其中,name為參數(shù)的名字。

          2getParameterValues 作用:當(dāng)一個(gè)參數(shù)可以有多個(gè)值時(shí),用此方法來取其值。它返回的是一個(gè)字符串?dāng)?shù)組。當(dāng)參數(shù)不存在時(shí),返回值為null

          原型:public String[] getParameterValues(String name)。其中,name為參數(shù)的名字。

          3getParameterNames 作用:取得Request對象中所有參數(shù)的名字,用于遍歷所有參數(shù)。它返回的是一個(gè)枚舉型的對象。

          原型:public Enumeration getParameterNames()

          (四) SmartUpload 這個(gè)類完成上傳下載工作。

          A.上傳與下載共用的方法:

          只有一個(gè):initialize。作用:執(zhí)行上傳下載的初始化工作,必須第一個(gè)執(zhí)行。

          原型:有多個(gè),主要使用下面這個(gè):

          public final void initialize(JAVAx.servlet.JSP.PageContext pageContext)

          其中,pageContextJSP頁面內(nèi)置對象(頁面上下文)。

          B.上傳文件使用的方法:

          1upload 作用:上傳文件數(shù)據(jù)。對于上傳操作,第一步執(zhí)行initialize方法,第二步就要執(zhí)行這個(gè)方法。

          原型:public void upload()

          2save 作用:將全部上傳文件保存到指定目錄下,并返回保存的文件個(gè)數(shù)。

          原型:public int save(String destPathName)

          public int save(String destPathName,int option) 其中,

          destPathName為文件保存目錄,option為保存選項(xiàng),它有三個(gè)值,分別是SAVE_PHYSICAL,SAVE_VIRTUALSAVE_AUTO。(同File類的saveAs方法的選項(xiàng)之值類似)SAVE_PHYSICAL指示組件將文件保存到以操作系統(tǒng)根目錄為文件根目錄的目錄下,

          SAVE_VIRTUAL指示組件將文件保存到以Web應(yīng)用程序根目錄為文件根目錄的目錄下,

          SAVE_AUTO則表示由組件自動選擇。

          注:save(destPathName)作用等同于save(destPathName,SAVE_AUTO)

          3getSize 作用:取上傳文件數(shù)據(jù)的總長度原型:public int getSize()

          4getFiles 作用:取全部上傳文件,以Files對象形式返回,可以利用Files類的操作方法來獲得上傳文件的數(shù)目等信息。

          原型:public Files getFiles()

          5getRequest 作用:取得Request對象,以便由此對象獲得上傳表單參數(shù)之值。

          原型:public Request getRequest()

          6setAllowedFilesList 作用:設(shè)定允許上傳帶有指定擴(kuò)展名的文件,當(dāng)上傳過程中有文件名不允許時(shí),組件將拋出異常。

          原型:public void setAllowedFilesList(String allowedFilesList)

          其中,allowedFilesList為允許上傳的文件擴(kuò)展名列表,各個(gè)擴(kuò)展名之間以逗號分隔。如果想允許上傳那些沒有擴(kuò)展名的文件,可以用兩個(gè)逗號表示。

          例如:setAllowedFilesList("doc,txt,,")將允許上傳帶doctxt擴(kuò)展名的文件以及沒有擴(kuò)展名的文件。

          7setDeniedFilesList 作用:用于限制上傳那些帶有指定擴(kuò)展名的文件。若有文件擴(kuò)展名被限制,則上傳時(shí)組件將拋出異常。

          原型:public void setDeniedFilesList(String deniedFilesList) 其中,deniedFilesList為禁止上傳的文件擴(kuò)展名列表,各個(gè)擴(kuò)展名之間以逗號分隔。如果想禁止上傳那些沒有擴(kuò)展名的文件,可以用兩個(gè)逗號來表示。

          例如:setDeniedFilesList("exe,bat,,")將禁止上傳帶exebat擴(kuò)展名的文件以及沒有擴(kuò)展名的文件。 8setMaxFileSize 作用:設(shè)定每個(gè)文件允許上傳的最大長度。

          原型:public void setMaxFileSize(long maxFileSize) 其中,maxFileSize為為每個(gè)文件允許上傳的最大長度,當(dāng)文件超出此長度時(shí),將不被上傳。

          9setTotalMaxFileSize 作用:設(shè)定允許上傳的文件的總長度,用于限制一次性上傳的數(shù)據(jù)量大小。

          原型:public void setTotalMaxFileSize(long totalMaxFileSize) 其中,totalMaxFileSize為允許上傳的文件的總長度

          posted on 2010-11-12 20:44 chenjinlong 閱讀(1870) 評論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           

          My Links

          Blog Stats

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 开鲁县| 石河子市| 甘泉县| 鄱阳县| 肇东市| 平顺县| 永春县| 岑溪市| 商洛市| 凉城县| 利辛县| 孝感市| 肥城市| 封开县| 夹江县| 黔西县| 石阡县| 咸丰县| 永春县| 青阳县| 方正县| 海城市| 玉屏| 屏东市| 米泉市| 沐川县| 铅山县| 威信县| 濮阳县| 鄂温| 合江县| 车险| 岳阳县| 特克斯县| 聊城市| 福贡县| 稷山县| 许昌县| 龙州县| 资阳市| 门源|