無線&移動互聯網技術研發

          換位思考·····
          posts - 19, comments - 53, trackbacks - 0, articles - 283
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
          在找common-upload文件上傳的時候順便熟悉了一下這里有一篇不錯的。
          http://wtxawr.javaeye.com/blog/309221

          【上傳】
          前臺:
          <form action="uploadimage.jsp" method="post" enctype="multipart/form-data" name="form1">
          <input type="file" name="file">
          <input type="submit" name="Submit" value="上傳">
          </form>
          注意一點就是 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;                                     // 設置每個上傳文件的大小,為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);                        // 設置允許上傳的文件類型
                      su.setDeniedFilesList(denidFilesList);   
                      su.upload();                                                    
          // 上傳文件
                      
                      String photoInfo 
          = su.getRequest().getParameter("info");        //必須這樣來獲取request
                      if(photoInfo==null||photoInfo.equals("")){                        //驗證照片描述信息,若沒有輸入,則提示輸入照片描述信息
                          messages="請輸入照片描述信息!";
                          forward
          ="/admin/error.jsp";
                      }
          else{
                          File file 
          = su.getFiles().getFile(0);                        // 獲取上傳的文件,因為只上傳了一個文件,所以可直接獲取            
                          if (!file.isMissing()) {                                     // 如果選擇了文件
                              String now = new Date().getTime() + "";                    //獲取當前時間并格式化為字符串
                              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);
              }


          }


          【下載】
          下載其實跟我上一篇文章 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);    //將文件轉碼 UTF-8
                      inStream = new FileInputStream(filename);
                      response.reset();    
          //必須reset,否則會出現文件不完整
                      
                      SmartUpload su 
          = new SmartUpload();    // 新建一個SmartUpload對象
                      
                      su.initialize(
          this.getServletConfig(), request, response);    // 初始化
                      
          // 設定contentDisposition為null以禁止瀏覽器自動打開文件,
                      
          //保證點擊鏈接后是下載文件。若不設定,則下載的文件擴展名為
                      
          //doc時,瀏覽器將自動用word打開它。擴展名為pdf時,
                      
          //瀏覽器將用acrobat打開。
                      su.setContentDisposition(null);            
                      su.downloadFile(filename);        
          // 下載文件            
                      
                      
          //循環取出流中的數據 
                      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轉碼
              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;
              }


              
          //取得下載文件的真實全路徑名稱
              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類   

          這個類包裝了一個上傳文件的所有信息。通過它,可以得到上傳文件的文件名、文件大小、擴展名、文件數據等信息。  

          File類主要提供以下方法:

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

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

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

          其中,destFilePathName是另存的文件名,optionSaveAs是另存的選項,該選項有三個值,分別是SAVEAS_PHYSICAL,SAVEAS_VIRTUALSAVEAS_AUTO

          SAVEAS_PHYSICAL表明以操作系統的根目錄為文件根目錄另存文件,

          SAVEAS_VIRTUAL表明以Web應用程序的根目錄為文件根目錄另存文件,

          SAVEAS_AUTO則表示讓組件決定,當Web應用程序的根目錄存在另存文件的目錄時,它會選擇SAVEAS_VIRTUAL,否則會選擇SAVEAS_PHYSICAL

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

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

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

          2isMissing 作用:這個方法用于判斷用戶是否選擇了文件,也即對應的表單項是否有值。選擇了文件時,它返回false。未選文件時,它返回true

          原型:public boolean isMissing()

          3getFieldName 作用:取HTML表單中對應于此上傳文件的表單項的名字。

          原型:public String getFieldName()

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

          原型:public String getFileName()

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

          原型:public String getFilePathName

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

          原型:public String getFileExt()

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

          原型:public int getSize()

          8getBinaryData 作用:取文件數據中指定位移處的一個字節,用于檢測文件等處理。

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

           

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

          1getCount 作用:取得上傳文件的數目。

          原型:public int getCount()

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

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

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

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

          原型:public Collection getCollection()

           

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

          原型:public Enumeration getEnumeration()

           

          Request  這個類的功能等同于JSP內置的對象Request。只所以提供這個類,是因為對于文件上傳表單,通過Request對象無法獲得表單項的值,必須通過JSPSmartUpload組件提供的Request對象來獲取。

          該類提供如下方法:

          1getParameter 作用:獲取指定參數之值。當參數不存在時,返回值為null

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

          2getParameterValues 作用:當一個參數可以有多個值時,用此方法來取其值。它返回的是一個字符串數組。當參數不存在時,返回值為null

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

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

          原型:public Enumeration getParameterNames()

           

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

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

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

          原型:有多個,主要使用下面這個:

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

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

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

          1upload 作用:上傳文件數據。對于上傳操作,第一步執行initialize方法,第二步就要執行這個方法。

          原型:public void upload()

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

          原型:public int save(String destPathName)

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

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

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

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

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

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

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

          原型:public Files getFiles()

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

          原型:public Request getRequest()

          6setAllowedFilesList 作用:設定允許上傳帶有指定擴展名的文件,當上傳過程中有文件名不允許時,組件將拋出異常。

          原型:public void setAllowedFilesList(String allowedFilesList)

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

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

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

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

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

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

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

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

          主站蜘蛛池模板: 黄平县| 罗田县| 宜阳县| 介休市| 望都县| 道孚县| 兴仁县| 克什克腾旗| 长乐市| 泽普县| 东安县| 河北区| 吉林省| 衡阳市| 简阳市| 甘洛县| 莫力| 尉犁县| 敦煌市| 独山县| 岐山县| 梁山县| 吉安县| 台北市| 大关县| 安溪县| 黄龙县| 梁山县| 海原县| 五河县| 葵青区| 南康市| 华宁县| 英吉沙县| 峨山| 泰州市| 博兴县| 化州市| 九龙县| 绵阳市| 丁青县|