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

简介

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

时间: 2024-10-12 03:09:28

upload4j安全、高效、易用的java http文件上传框架的相关文章

java多线程文件上传服务器

描述: (1)jdk自带线程池见 JDK自带线程池配置 (2)此上传文件服务器中上传文件的后缀名通过第一段缓冲字符流传递,此缓冲字符流大小为1024,在文件接收端以1024接收.处理. 1.服务器代码如下(使用jdk自带线程池): 1 /** 2 * 服务器处理多线程问题 3 * 4 * 1.因为服务器是要很多人访问的,因此里面一定要用多线程来处理,不然只能一个人一个人的访问,那还叫Y啥服务器 5 * 6 * 2,拿上面这个文件上传的例子来说,它将每个连接它的用户封装到线程里面去,把用户要执行的

Java Socket文件上传

客户端: import java.io.FileInputStream; import java.net.Socket; /** * Created by 290248126 on 14-5-11. */ public class Client { public static void main(String[] args) throws Exception { FileInputStream fileInputStream = new FileInputStream("e:/1.png&quo

Java Web文件上传

一. Java Web文件上传需要借助一些第三方库,常用的是借助Apache的包,有两个: commons-fileupload commons-io 二.前端代码示例: <form method="post" id="uploadApkForm" action="uploadapk" enctype="multipart/form-data"> <p> 文件:<input name="

HTTP POST请求报文格式分析与Java实现文件上传

时间 2014-12-11 12:41:43  CSDN博客 原文  http://blog.csdn.net/bboyfeiyu/article/details/41863951 主题 HTTPHttpComponents 在开发中,我们使用的比较多的HTTP请求方式基本上就是GET.POST.其中GET用于从服务器获取数据,POST主要用于向服务器提交一些表单数据,例如文件上传等.而我们在使用HTTP请求时中遇到的比较麻烦的事情就是构造文件上传的HTTP报文格式,这个格式虽说也比较简单,但也

java web 文件上传下载

文件上传下载案例: 首先是此案例工程的目录结构: 处理上传: FileUploadServlet.java 1 package fnz.fileUploadTest; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.PrintWriter; 7 import java.text.SimpleDateFormat; 8 import java.

JAVA实现文件上传

  代码如下: 还要两个jar包      前台页面: 01 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 02 <% 03 String path = request.getContextPath(); 04 String basePath = request.getScheme()+"://"+request.ge

html5+java大文件上传代码

<body> <input id="fileid" type="file" accept="video/*;capture=camera" onchange="onfile(this)"> <input id="btn" type="button" value="提交"> <script type="text/jav

Java实现文件上传(验证文件大小、文件类型)

文件上传是每个java开发者必须掌握的.文件上传有很多种实现方式,但其实也大同小异.笔人在这里为大家介绍一种我习惯用的,上传文件的方式.大家先看代码,最后我会分享我的源码给大家. 1.首先要准备一下需要用到的jar包. commons-fileupload-1.2.1.jar -commons-io-1.4.jar 可以从[(http://commons.apache.org/)]下载,当然,我的项目源码里也有 然后开始写代码. public static String fileUpload(H

【FTP】java FTPClient 文件上传内容为空,文件大小为0

问题:如题所述,使用FTPClient上传至FTP服务器, 表现如下:①文件大小为0 ②上传很小的文件,但是要花费很长的时间,20K要花费2分钟甚至更久 ③没有任何的报错,没有任何的乱码 解决方法: [参考:http://blog.csdn.net/tengdazhang770960436/article/details/43274001] 如果你在本地的 Java 项目里面去用 FtpClient 上传文件,然后虽然文件上传上去了,但是文件里面没有内容,那么这说明你的机器防火墙设置有问题如下图