简介

upload4j是一款轻量级http文件上传框架,使用简单,实现高效,功能专一,摆脱传统http文件上传框架的繁琐。

upload4j的诞生并不是为了解决所有上传需求,而是专注于基础通用需求。

upload4j带来的

     

     ·  实现直接文件流上传、html表单流上传两种上传模式。

·  io操作部分采用nio机制。

·  支持文件过滤,并且基于二进制文件头进行过滤,而非传统的文件扩展名过滤。

·  上传文件大小不受内存大小限制。

upload4j给不了的

·  文件上传进度。

·  批量上传。

upload4j使用示例

直接文件流上传

启用过滤功能

 // 过滤器
MetaFilter metaFilter = new MetaFilter();
metaFilter.add(".jpg", "FFD8FF"); // 允许的文件类型,params: 文件后缀名, 文件头十六进制字符串
Map<String, String> metaMap = new HashMap<String, String>();
metaMap.put(".png", "89504E47");
metaFilter.fromMap(metaMap); // 批量添加允许的文件类型 // 配置
MetaFilterConfig metaFilterConfig = MetaFilterConfig.custom().setBufferSize(8192) // 默认8192B,单位B
.setMaxFileSize(1024 * 1024) // 限制文件最大1M,单位B
.setFilter(metaFilter) // 过滤器
.setRequest(request) // 从request对象的body中读取文件流
.setFileNameWithoutSuffix("123") // 保存文件名(不带扩展名,自动识别)
.setSavePath("/home/user1/upload/img/2015/09/24/"); // 保存路径 // 上传
StreamUpload streamUpload = new StreamUpload();
SimpleUploadResponse response = streamUpload.upload(metaFilterConfig); // 上传结果
if(response.isSuccess()){ // 成功
// 获取文件保存完整路径
response.getFilePath();
// ......
}else{ // 失败
// 判断失败是否可控
if(response.getException() == null){ // 可控
// 获取失败原因
response.getErrmsg();
// ......
}else{ // 不可控
// 直接抛出异常
throw response.getException();
}
}

不启用过滤功能

 // 配置
StreamConfig streamConfig = StreamConfig.custom().setBufferSize(8192) // 默认8192B,单位B
.setMaxFileSize(1024 * 1024) // 限制文件最大1M,单位B
.setRequest(request) // 从request对象的body中读取文件流
.setFileNameWithSuffix("123.jpg") // 保存完整文件名(带扩展名)
.setSavePath("/home/user1/upload/img/2015/09/24/"); // 保存路径 // 上传
StreamUpload streamUpload = new StreamUpload();
SimpleUploadResponse response = streamUpload.upload(streamConfig); // 上传结果
if(response.isSuccess()){ // 成功
// 获取文件保存完整路径
response.getFilePath();
// ......
}else{ // 失败
// 判断失败是否可控
if(response.getException() == null){ // 可控
// 获取失败原因
response.getErrmsg();
// ......
}else{ // 不可控
// 直接抛出异常
throw response.getException();
}
}

html表单流上传

启用过滤功能

 // 过滤器
MetaFilter metaFilter = new MetaFilter();
metaFilter.add(".jpg", "FFD8FF"); // 允许的文件类型,params: 文件后缀名, 文件头十六进制字符串
Map<String, String> metaMap = new HashMap<String, String>();
metaMap.put(".png", "89504E47");
metaFilter.fromMap(metaMap); // 批量添加允许的文件类型 // 配置
MetaFilterConfig metaFilterConfig = MetaFilterConfig.custom().setBufferSize(8192) // 默认8192B,单位B
.setMaxFileSize(1024 * 1024) // 限制文件最大1M,单位B
.setFilter(metaFilter) // 过滤器
.setRequest(request) // 从request对象的body中读取文件流
.setFileNameWithoutSuffix("123") // 保存文件名(不带扩展名,自动识别)
.setSavePath("/home/user1/upload/img/2015/09/24/"); // 保存路径 // 上传
FormUpload formUpload = new FormUpload();
SimpleUploadResponse response = formUpload.upload(metaFilterConfig); // 上传结果
if(response.isSuccess()){ // 成功
// 获取文件保存完整路径
response.getFilePath();
// ......
}else{ // 失败
// 判断失败是否可控
if(response.getException() == null){ // 可控
// 获取失败原因
response.getErrmsg();
// ......
}else{ // 不可控
// 直接抛出异常
throw response.getException();
}
}

不启用过滤功能

 // 配置
FormConfig formConfig = FormConfig.custom().setBufferSize(8192) // 默认8192B,单位B
.setMaxFileSize(1024 * 1024) // 限制文件最大1M,单位B
.setRequest(request) // 从request对象的body中读取文件流
.setFileNameWithoutSuffix("123") // 保存文件名(不带扩展名,自动提取)
.setSavePath("/home/user1/upload/img/2015/09/24/"); // 保存路径 // 上传
FormUpload formUpload = new FormUpload();
SimpleUploadResponse response = formUpload.upload(formConfig); // 上传结果
if(response.isSuccess()){ // 成功
// 获取文件保存完整路径
response.getFilePath();
// ......
}else{ // 失败
// 判断失败是否可控
if(response.getException() == null){ // 可控
// 获取失败原因
response.getErrmsg();
// ......
}else{ // 不可控
// 直接抛出异常
throw response.getException();
}
}

浏览upload4j项目

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

  1. java进行文件上传,带进度条

    网上看到别人发过的一个java上传的代码,自己写了个完整的,附带源码 项目环境:jkd7.tomcat7. jar包:commons-fileupload-1.2.1.jar.commons-io-1 ...

  2. Java Web文件上传

    参考资料:http://www.cnblogs.com/xdp-gacl/p/4200090.html 一.问题描述 Java Web文件上传需要借助一些第三方库,常用的是借助Apache的包,有两个 ...

  3. CentOS下安装配置NFS并通过Java进行文件上传下载

    1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...

  4. java实现文件上传下载

    喜欢的朋友可以关注下,粉丝也缺. 今天发现已经有很久没有给大家分享一篇技术文章了,于是想了一下给大家分享一篇java实现文件上传下载功能的文章,不喜欢的希望大家勿喷. 想必大家都知道文件的上传前端页面 ...

  5. Java实现文件上传到服务器(FTP方式)

    Java实现文件上传到服务器(FTP方式) 1,jar包:commons-net-3.3.jar 2,实现代码: //FTP传输到数据库服务器 private boolean uploadServer ...

  6. Java Web文件上传原理分析(不借助开源fileupload上传jar包)

    Java Web文件上传原理分析(不借助开源fileupload上传jar包) 博客分类: Java Web   最近在面试IBM时,面试官突然问到:如果让你自己实现一个文件上传,你的代码要如何写,不 ...

  7. Java超大文件上传解决办法

    这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...

  8. java+大文件上传解决方案

    众所皆知,web上传大文件,一直是一个痛.上传文件大小限制,页面响应时间超时.这些都是web开发所必须直面的. 本文给出的解决方案是:前端实现数据流分片长传,后面接收完毕后合并文件的思路. 实现文件夹 ...

  9. H5+JAVA的文件上传,断点续传

    这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...

随机推荐

  1. webpack初试

    前言: 知道这完儿,没用过.关于webpack有很多介绍了,就不多说了.放几个链接,方便新手理解.这是给纯没用过的人了解的.这里只是简单介绍一下webpack的基本用法.大多内容都是来自webpack ...

  2. AVAssetReader+AVAssetReaderTrackOutput播放视频

    该文章引用自:http://www.jianshu.com/p/3d5ccbde0de1 IOS 微信聊天发送小视频的秘密(AVAssetReader+AVAssetReaderTrackOutput ...

  3. java 读写properties (配置)文件

    Properties属性文件在Java应用程序中是经常可以看得见的,也是特别重要的一类文件.它用来配置应用程序的一些信息,不过这些信息一般都是比较少的数据,没有必要使用数据库文件来保存,而使用一般的文 ...

  4. ring3硬件断点

    4个断点寄存器DR0~DR3用来设置断点的线性地址. DR6为状态寄存器,DR7为控制寄存器. DR4和DR5保留.当CR4.DE==1时,访问DR4和DR5产生#UD异常:IF CR4.DE==0, ...

  5. RumTime实践之--UITableView和UICollectionView缺省页的实现

    有关RunTime的知识点已经看过很久了,但是一直苦于在项目中没有好的机会进行实际运用,俗话说"光说不练假把式",正好最近在项目中碰到一个UITableView和UICollect ...

  6. 自己用的jquery经常用的工具command

    var Cmd = { Entity: { QueryString: {}, }, RootPath: function () { var pathName = window.location.pat ...

  7. 返水bug-备用

    NOOK(N) CSBFB(25) off(Y) QQ(2652880032) G(1) off1(Y) QQ1(3479301404) G1(1) off2(Y) QQ2(309235846) G2 ...

  8. Linux内核笔记--内存管理之用户态进程内存分配

    内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...

  9. bzoj 3507: [Cqoi2014]通配符匹配

    Description 几乎所有操作系统的命令行界面(CLI)中都支持文件名的通配符匹配以方便用户.最常见的通配符有两个,一个是星号(“”’),可以匹配0个及以上的任意字符:另一个是问号(“?”),可 ...

  10. ASP.NET下回车键的触发效果

    在ASP.NET下,在客户端触发回车键,默认调用了页面中第一个button,这有时是非常头痛的,比如页面的第一个按键是注销键时,想想也够可怕了. .net提供设置默认回车键的属性,this.Form. ...