簡介
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,機關B
10 .setMaxFileSize(1024 * 1024) // 限制檔案最大1M,機關B
11 .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,機關B
10 .setMaxFileSize(1024 * 1024) // 限制檔案最大1M,機關B
11 .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項目