简介

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. resin实现域名访问

    1.修改resin.properties 2.修改hosts文件 3.添加一行记录 配置完后就可以通过test.com访问项目了.

  2. 【Hibernate框架】flush机制

    背景: 一个偶然的机会,我做了一个例子,中间我遇到了一个有意思的问题,就是在执行commit方法之前,做了两次save操作,如下: SessionFactory sf = new Configurat ...

  3. vue-loader配合webpack的使用及安装

    vue-loader配合webpack的使用及安装: 工程文件简单的目录结构 index.html main.js   入口文件 App.vue   vue文件,官方推荐命名法 package.jso ...

  4. UVA 12300 Smallest Regular Polygon(正多边形)

    题意:给出两点,求经过这两点的正n边形的最小面积 题解:这两点一定是最长的弦,我们设正多边形中点c,找到c到每个点的距离(都相同) 我们知道那个等腰三角形的底与每个角度就使用余弦定理 #include ...

  5. Rdeis 详解 小白

    Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用. Redis不仅仅支持简单的key-v ...

  6. leanote个人版安装

    https://github.com/leanote/leanote/wiki/Leanote-%E4%BA%8C%E8%BF%9B%E5%88%B6%E7%89%88%E8%AF%A6%E7%BB% ...

  7. css3之3D魔方动画(小白版)

      在这里分享一下3D魔方动画,html5+CSS3即可完成~无图无真相,先上效果图 第一步非常简单,就是先将魔方的结构画出来.大家都玩过魔方,知道魔方是一个有六个面的正方体.这里我们先写一个大的di ...

  8. 转:界面之下:还原真实的 MVC、MVP、MVVM 模式

    前言 做客户端开发.前端开发对MVC.MVP.MVVM这些名词不了解也应该大致听过,都是为了解决图形界面应用程序复杂性管理问题而产生的应用架构模式.网上很多文章关于这方面的讨论比较杂乱,各种MV*模式 ...

  9. 【异常】No ManagedConnections available within configured blocking timeout

    Caused by: org.jboss.util.NestedSQLException: No ManagedConnections available within configured bloc ...

  10. tungsten抽取和应用mysql binlog

    首先举例说明 api的基本使用方式 首先进行配置 , 可以看到源数据库和目的数据库 TungstenProperties tp=new TungstenProperties(); tp.setStri ...