简介

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. NetMQ(二): 请求响应模式 Request-Reply

    ZeroMQ系列 之NetMQ 一:zeromq简介 二:NetMQ 请求响应模式 Request-Reply 三:NetMQ 发布订阅模式 Publisher-Subscriber 四:NetMQ ...

  2. Windows - 性能监控之磁盘剩余空间大小警报

    开始 -> 运行 -> 键入命令 perfmon.msc 数据收集器(Data Collector Sets) -> 用户自定义(User Defined)

  3. dos下对mysql的简单操作(linux类似)

    >>>>>>>>>>>>>>>>>>>> 基础入门语句10条 1. 连接服务器  ...

  4. 《UML大战需求分析》阅读随笔(三)

    一: 需求中提到的各种业务概念.人物等,经过抽象后都可以视之为类. 平时遇到的人.物,我们将遇到的都是具体的人.物,也就如程序中的对象,是一个实实在在的东西. 当我们分析需求的时候,设计模型的时候,我 ...

  5. Python学习日志(一)

    Python的安装 访问http://www.python.org 点击downloads,选择Windows 我在这里选择了Latest Python 3 Release - Python 3.5. ...

  6. 分布式大数据高并发的web开发框架

    一.引言 通常我们认为静态网页html的网站速度是最快的,但是自从有了动态网页之后,很多交互数据都从数据库查询而来,数据也是经常变化的,除了一些新闻资讯类的网站,使用html静态化来提高访问速度是不太 ...

  7. Lua笔记

    闭包 示例一 function newCounter() return function() -- anonymous function i = i + return i end end c1 = n ...

  8. 从零开始山寨Caffe·拾:IO系统(三)

    数据变形 IO(二)中,我们已经将原始数据缓冲至Datum,Datum又存入了生产者缓冲区,不过,这离消费,还早得很呢. 在消费(使用)之前,最重要的一步,就是数据变形. ImageNet Image ...

  9. LintCode 78:Longest Common Prefix

      public class Solution { /** * @param strs: A list of strings * @return: The longest common prefix ...

  10. API,框架,组件

    API 是什么,API 就是通过提供方便使用的接口来执行它实现的功能. 用一个手电筒来作比喻: 手电筒的按钮就是接口,按下按钮就是它的方便的使用方式,发光就是它的功能,在这里我们可以称这个手电筒是个 ...