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