common-fileUpload 上傳圖片到服務器端

今天要用到一個圖片上傳的,據說Struts2就是用的這個,啃了啃鷹文文檔,實驗了下common-fileupload實驗成功了,記錄下:前端

Servlet裏doPost()方法貼出:java

/** 大體步驟爲: 
 * 1.準備FileItem工廠; 
 * 2.把工廠交給ServletFileUpload,讓他把前端的表單條條信息解析; 
 * 3.處理解析好返回的列表中的每個具體項 */  
@SuppressWarnings("unchecked")  
@Override  
protected void doPost(HttpServletRequest request,  
        HttpServletResponse response) throws ServletException, IOException {  

    /* FileItemFactory是FileItem的工廠,不過它只是個interface, 
     * 有兩個實現DiskFileItemFactory和DefaultFileItemFactory; 
     * 可是api裏說:"Deprecated. Use DiskFileItemFactory instead." */  
    FileItemFactory itemFactory = new DiskFileItemFactory();  
    /* FileUpload類是用來處理文件的上傳,而ServletFileUpload是它的子類, 
     * 能夠判斷和解析前端的表單類型和表單項信息 */  
    ServletFileUpload upload = new ServletFileUpload(itemFactory);  
    List<FileItem> list = null;  
    try {  
        //parseRequest將前端的表單項項解析爲FileItem列表  
        list = upload.parseRequest(request);  
        Iterator<FileItem> it = list.iterator();  
        while (it.hasNext()) {  
            /* 
             * 最核心的就是FileItem了,若是form的屬性是enctype=multipart/form-data, 
             * 那麼它會用來描述POST請求的form表單的每個普通表單項和上傳項; 
             * 能夠認爲每個input對應的就是一個FileItem;看看FileItem的屬性封裝就知道了(加入客戶端有): 
             * 用戶<input type="text" name="userName"><br>//普通表單項  
             * 圖片1<input type="file" name="img1"/><br/>//上傳項  
             * 1.getContentType()   //普通表單項null;上傳項要看類型如jpg,jpeg是image/jpeg;png是image/png;gif是image/gif: 
             * 2.getFieldName()     //就是前臺的name="userName"和name="img1"; 
             * 3.getString()        //就是用戶填寫的用戶名,如你在表單裏輸入"root"提交後getString()就獲得root; 
             * 3.getInputStream()   //根據輸出判斷:普通項是ByteArrayInputStream類型,上傳項目是:FileInputStream類型 
             * 4.getName()          //普通表單項null,上傳項爲出去目錄名後的文件名,如:"ubuntuBackground.jpg" 
             * 5.getOutputStream()  //輸出流,沒有深看 
             * 6.getSize()          //大小:普通爲用戶輸入字符的字節數,上傳爲文件的大小字節數; 
             * 7.isFormField()      //這個就是判斷是普通項[true],仍是上傳項[false]; 
             */  
            FileItem item = it.next();  
            /* 過濾下,只有表單項中類型爲圖片的才保存 */  
            if ("image/jpeg".equals(item.getContentType())  
                    || "image/gif".equals(item.getContentType())  
                    || "image/png".equals(item.getContentType())) {  
                InputStream inStream = item.getInputStream();  
                byte[] b = new byte[1024];  
                int rb = inStream.read(b);  
                File file=new File("/home/nie/images/", item.getName());  
                OutputStream outStream = new FileOutputStream(file);  
                while (rb != -1) {  
                    outStream.write(b);  
                    rb = inStream.read(b);  
                }  
                outStream.flush();  
                inStream.close();  
                outStream.close();  
            }  
        }  
    } catch (FileUploadException e) {  
        e.printStackTrace();  
    }  
}

總結來看,重要的就3個東西:ubuntu

  • 1.FileItemFactory【DiskFileItemFactory】;
  • 2.FileUpload【ServletFileUpload】;
  • 3.FileItem

而後就能夠用IO了;api

---[2011-07-29]---ide

相關文章
相關標籤/搜索