簡介
upload4j是一款輕量級http文件上傳框架,使用簡單,實現高效,功能專一,擺脫傳統http文件上傳框架的繁瑣。
upload4j的誕生并不是為了解決所有上傳需求,而是專注于基礎通用需求。
upload4j帶來的
· 實現直接文件流上傳、html表單流上傳兩種上傳模式。
· io操作部分采用nio機制。
· 支持文件過濾,并且基于二進制文件頭進行過濾,而非傳統的文件擴展名過濾。
· 上傳文件大小不受內存大小限制。
upload4j給不了的
· 文件上傳進度。
· 批量上傳。
upload4j使用示例
直接文件流上傳
啟用過濾功能
1 // 過濾器 2 MetaFilter metaFilter = new MetaFilter(); 3 metaFilter.add(".jpg", "FFD8FF"); // 允許的文件類型,params: 文件后綴名, 文件頭十六進制字符串 4 Map<String, String> metaMap = new HashMap<String, String>(); 5 metaMap.put(".png", "89504E47"); 6 metaFilter.fromMap(metaMap); // 批量添加允許的文件類型 7 8 // 配置 9 MetaFilterConfig metaFilterConfig = MetaFilterConfig.custom().setBufferSize(8192) // 默認8192B,單位B10 .setMaxFileSize(1024 * 1024) // 限制文件最大1M,單位B11 .setFilter(metaFilter) // 過濾器12 .setRequest(request) // 從request對象的body中讀取文件流13 .setFileNameWithoutSuffix("123") // 保存文件名(不帶擴展名,自動識別)14 .setSavePath("/home/user1/upload/img/2015/09/24/"); // 保存路徑15 16 // 上傳17 StreamUpload streamUpload = new StreamUpload();18 SimpleUploadResponse response = streamUpload.upload(metaFilterConfig);19 20 // 上傳結果21 if(response.isSuccess()){ // 成功22 // 獲取文件保存完整路徑23 response.getFilePath();24 // ......25 }else{ // 失敗26 // 判斷失敗是否可控27 if(response.getException() == null){ // 可控28 // 獲取失敗原因29 response.getErrmsg();30 // ......31 }else{ // 不可控32 // 直接拋出異常33 throw response.getException();34 }35 }
不啟用過濾功能
1 // 配置 2 StreamConfig streamConfig = StreamConfig.custom().setBufferSize(8192) // 默認8192B,單位B 3 .setMaxFileSize(1024 * 1024) // 限制文件最大1M,單位B 4 .setRequest(request) // 從request對象的body中讀取文件流 5 .setFileNameWithSuffix("123.jpg") // 保存完整文件名(帶擴展名) 6 .setSavePath("/home/user1/upload/img/2015/09/24/"); // 保存路徑 7 8 // 上傳 9 StreamUpload streamUpload = new StreamUpload();10 SimpleUploadResponse response = streamUpload.upload(streamConfig);11 12 // 上傳結果13 if(response.isSuccess()){ // 成功14 // 獲取文件保存完整路徑15 response.getFilePath();16 // ......17 }else{ // 失敗18 // 判斷失敗是否可控19 if(response.getException() == null){ // 可控20 // 獲取失敗原因21 response.getErrmsg();22 // ......23 }else{ // 不可控24 // 直接拋出異常25 throw response.getException();26 }27 }
html表單流上傳
啟用過濾功能
1 // 過濾器 2 MetaFilter metaFilter = new MetaFilter(); 3 metaFilter.add(".jpg", "FFD8FF"); // 允許的文件類型,params: 文件后綴名, 文件頭十六進制字符串 4 Map<String, String> metaMap = new HashMap<String, String>(); 5 metaMap.put(".png", "89504E47"); 6 metaFilter.fromMap(metaMap); // 批量添加允許的文件類型 7 8 // 配置 9 MetaFilterConfig metaFilterConfig = MetaFilterConfig.custom().setBufferSize(8192) // 默認8192B,單位B10 .setMaxFileSize(1024 * 1024) // 限制文件最大1M,單位B11 .setFilter(metaFilter) // 過濾器12 .setRequest(request) // 從request對象的body中讀取文件流13 .setFileNameWithoutSuffix("123") // 保存文件名(不帶擴展名,自動識別)14 .setSavePath("/home/user1/upload/img/2015/09/24/"); // 保存路徑15 16 // 上傳17 FormUpload formUpload = new FormUpload();18 SimpleUploadResponse response = formUpload.upload(metaFilterConfig);19 20 // 上傳結果21 if(response.isSuccess()){ // 成功22 // 獲取文件保存完整路徑23 response.getFilePath();24 // ......25 }else{ // 失敗26 // 判斷失敗是否可控27 if(response.getException() == null){ // 可控28 // 獲取失敗原因29 response.getErrmsg();30 // ......31 }else{ // 不可控32 // 直接拋出異常33 throw response.getException();34 }35 }
不啟用過濾功能
1 // 配置 2 FormConfig formConfig = FormConfig.custom().setBufferSize(8192) // 默認8192B,單位B 3 .setMaxFileSize(1024 * 1024) // 限制文件最大1M,單位B 4 .setRequest(request) // 從request對象的body中讀取文件流 5 .setFileNameWithoutSuffix("123") // 保存文件名(不帶擴展名,自動提取) 6 .setSavePath("/home/user1/upload/img/2015/09/24/"); // 保存路徑 7 8 // 上傳 9 FormUpload formUpload = new FormUpload();10 SimpleUploadResponse response = formUpload.upload(formConfig);11 12 // 上傳結果13 if(response.isSuccess()){ // 成功14 // 獲取文件保存完整路徑15 response.getFilePath();16 // ......17 }else{ // 失敗18 // 判斷失敗是否可控19 if(response.getException() == null){ // 可控20 // 獲取失敗原因21 response.getErrmsg();22 // ......23 }else{ // 不可控24 // 直接拋出異常25 throw response.getException();26 }27 }
瀏覽upload4j項目
新聞熱點
疑難解答