1. 程式人生 > >框架中如何根據fileupload工具包實現檔案上傳功能

框架中如何根據fileupload工具包實現檔案上傳功能

工具包

Apache-fileupload.jar – 檔案上傳核心包。

Apache-commons-io.jar – 這個包是fileupload的依賴包。同時又是一個工具包。

程式碼 

servletFileUpload官方API

        /*獲取tomcat的work目錄,作為上傳時存放的臨時路徑(超過最大值時才存放)*/
        File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");

        /**
         * DiskFileItemFactory構造的兩個引數
         *  第一個引數:sizeThreadHold - 設定快取(記憶體)儲存多少位元組資料,預設為10240位元組,即10K
         *    如果一個檔案沒有大於10K,則直接使用記憶體直接儲存成檔案就可以了。
         *    如果一個檔案大於10K,就需要將檔案先儲存到臨時目錄中去。
         *  第二個引數 File 是指臨時目錄位置 - 可以不用tomcat的work目錄可以用任意一個目錄
         
*/ DiskFileItemFactory fileItemFactory = new DiskFileItemFactory(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD, repository); servletFileUpload = new ServletFileUpload(fileItemFactory); int uploadLimit = ConfigHelper.getAppUploadLimit(); //獲取檔案上傳限制預設為10(M) if (uploadLimit != 0){ servletFileUpload.setFileSizeMax(uploadLimit
*1024*1024); //設定單檔案最大大小為10M } /*解析request*/ Map<String,List<FileItem>> fileItemListMap = servletFileUpload.parseParameterMap(request); //將request轉換為Map if (CollectionUtil.isNotEmpty(fileItemListMap)){ for (Map.Entry<String,List<FileItem>> fileItemListEntry : fileItemListMap.entrySet()){ String fieldName
= fileItemListEntry.getKey(); //獲取表單欄位名 List<FileItem> fileItemList = fileItemListEntry.getValue(); if (CollectionUtil.isNotEmpty(fileItemListMap)){ for (FileItem fileItem:fileItemList){ if (fileItem.isFormField()){ //如果是表單欄位 }else{ //如果是檔案 String fileName = FileUtil.getRealFileName(new String(fileItem.getName().getBytes(),"UTF-8")); //獲取檔名 if (StringUtil.isNotEmpty(fileName)){ //如果檔名不為空 long fileSize = fileItem.getSize(); //獲取檔案大小 String contentType = fileItem.getContentType(); //獲取檔案型別 InputStream inputStream = fileItem.getInputStream(); //獲取檔案輸入流 fileParamList.add(new FileParam(fieldName,fileName,fileSize,contentType,inputStream)); //例項化一個檔案引數並加到檔案引數集合中去 } } } } } }

原文連結