upload4j安全、高效、易用的java http文件上传框架
简介
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安全、高效、易用的java http文件上传框架的更多相关文章
- java进行文件上传,带进度条
网上看到别人发过的一个java上传的代码,自己写了个完整的,附带源码 项目环境:jkd7.tomcat7. jar包:commons-fileupload-1.2.1.jar.commons-io-1 ...
- Java Web文件上传
参考资料:http://www.cnblogs.com/xdp-gacl/p/4200090.html 一.问题描述 Java Web文件上传需要借助一些第三方库,常用的是借助Apache的包,有两个 ...
- CentOS下安装配置NFS并通过Java进行文件上传下载
1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...
- java实现文件上传下载
喜欢的朋友可以关注下,粉丝也缺. 今天发现已经有很久没有给大家分享一篇技术文章了,于是想了一下给大家分享一篇java实现文件上传下载功能的文章,不喜欢的希望大家勿喷. 想必大家都知道文件的上传前端页面 ...
- Java实现文件上传到服务器(FTP方式)
Java实现文件上传到服务器(FTP方式) 1,jar包:commons-net-3.3.jar 2,实现代码: //FTP传输到数据库服务器 private boolean uploadServer ...
- Java Web文件上传原理分析(不借助开源fileupload上传jar包)
Java Web文件上传原理分析(不借助开源fileupload上传jar包) 博客分类: Java Web 最近在面试IBM时,面试官突然问到:如果让你自己实现一个文件上传,你的代码要如何写,不 ...
- Java超大文件上传解决办法
这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...
- java+大文件上传解决方案
众所皆知,web上传大文件,一直是一个痛.上传文件大小限制,页面响应时间超时.这些都是web开发所必须直面的. 本文给出的解决方案是:前端实现数据流分片长传,后面接收完毕后合并文件的思路. 实现文件夹 ...
- H5+JAVA的文件上传,断点续传
这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...
随机推荐
- java中的小数的取整的几种函数
Math类中提供了5个与取整相关的函数,如下所示: static double ceil(double a):天花板函数,返回大于等于a的最小整数(但是以浮点数形式存储). static double ...
- OpenLayers 3 之 地图样式(ol.style)详解
地图样式是由 style 类控制的,其包含了地图样式的方方面面,例如,填充色.图标样式.图片样式.规则图形样式.边界样式.文字样式等,样式一般针对矢量要素图层. 矢量图层样式可以事先写好,写成静态的, ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
- 用Fiddler的自动响应模拟系统集成
1. 下载最新版本的Fiddler Fiddler 官网 2, 安装并启动Fiddler 3, 勾选自动响应 见上图 4, 添加自动响应规则 见上图 5, 添加自动响应内容文件 添加响应文件到Fidd ...
- Codeforces 486E LIS of Sequence 题解
题目大意: 一个序列,问其中每一个元素是否为所有最长上升子序列中的元素或是几个但不是所有最长上升子序列中的元素或一个最长上升子序列都不是. 思路: 求以每一个元素为开头和结尾的最长上升子序列长度,若两 ...
- MongoDB的安装与设置MongoDB服务
Mongo DB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐.Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB ...
- es6转es5
一.在没有IDE情况下的转换 在"我的电脑->D盘”新建个文件夹es6,文件夹里新建一个文件es6.js. 打开命令行窗口 1.先全局安装babel-cli,输入命令 npm inst ...
- sql查询重复数据
select *from Awhere id in (select id from A group by id having count(1) >= 2) 注释:id 为重复的关键字(更换成所需 ...
- Erlang error handling
Erlang error handling Contents Preface try-catch Process link Erlang-way error handling OTP supervis ...
- android 通过uri获取bitmap图片并压缩
很多人在调用图库选择图片时会在onActivityResult中用Media.getBitmap来获取返回的图片,如下: Uri mImageCaptureUri = data.getData(); ...