Commons FileUpload 上傳文件,得到文件流


最近在做一個從客戶端上傳文件,服務器得到文件流,加密,並得到字符串存入數據庫,由於對java文件的操作甚少,經過幾番折騰,終於搞定,特意拿出來分享。

上傳采用的是Commons FileUpload,Commons FileUpload上傳需要兩個jar包,分別是commons-fileupload-1.2.2.jarcommons-io-2.3.jar
Commons FileUpload提供三種文件上傳處理方式,DiskFileUpload、ServletFileUpload和PortletFileUpload三種方式,其中DiskFileUpload已經在javadoc下已經被標記為過期的方法,建議用ServletFileUpload代替,而PortletFileUpload需要配合portlet-api來使用,所以這里我使用的是ServletFileUpload,並且這個也是最常用的。
 
1.首先用到Html的input標簽,type為file
< form action ="UploadServlet" enctype= "multipart/form-data" method ="post" >
             < input type ="file" name= "filecer" id= "filecer" >
             < input type ="text" name= "name">
             < input type ="submit" value= "上傳">
       </form >
注意:form表單的enctype= "multipart/form-data" method ="post"
 
2.創建一個servlet,用來處理提交表單數據。servlet-name為:UploadServlet,並創建service方法,方法如下:
//檢查輸入請求是否為 multipart表單數據
             boolean isMultipart = ServletFileUpload.isMultipartContent(request);
             try {
                   if (isMultipart == true) {
                         //為該請求創建一個DiskFileItemFactory對象,通過它來解析請求
                        FileItemFactory factory = new DiskFileItemFactory();
                        ServletFileUpload upload = new ServletFileUpload(factory);
                         //將所有的表單項目都保存到List中
                        List<FileItem> items = upload.parseRequest(request);
                        Iterator<FileItem> itr = items.iterator();
                         //循環list,取得表單項
                         while (itr.hasNext()) {
                              FileItem item = (FileItem) itr.next();
                               //檢查當前項目是普通表單項目還是文件。
                               if (item.isFormField()) {//如果是普通表單項目,顯示表單內容。
                                    String fieldName = item.getFieldName();
                                     if (fieldName.equals("name" )){ //對應form表單中type="text" name="name"
                                          System. out .println("the field name is" + item.getString()); //顯示表單內容
                                    }
                              } else {//如果是文件
                                     if (item.getFieldName().equals("filecer" )){ //如果上傳文件的file的name為" filecer"
                                          InputStream inStream = item.getInputStream();
                                          ByteArrayOutputStream out = new ByteArrayOutputStream();
                                           int ch;
                                          String res = "" ;
                                           while ((ch = inStream.read()) != -1) {
                                                out.write(ch);
                                          }
                                           byte [] result = out.toByteArray();
                                          res = Base64.byteArrayToBase64(result);
                                          
                                          System. out .println(res);
                                          System. out .print("the upload file name is" + item.getName());
                                    }
                              }
                        }
                  } else {
                        System. out .println("the enctype must be multipart/form-data");
                  }
            } catch (FileUploadException e) {
                  e.printStackTrace();
            }
3.運行后,上傳文件,即可從控制台輸出加密后的文件字符串
最后附上源碼:點擊下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM