upload4j安全、高效、易用的javahttp文件上传框架

12/12/2015来源:Java教程人气:1595

简介

     

     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项目