简介

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

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. Andriod学习笔记3:Mac 平台下搭建 CLion 集成开发环境

    1. 安装Xcode 通过App store或者下载安装Xcode. 安装完成之后,最好启动一下Xcode,否则可能会报"Error:The C compiler "/usr/bi ...

  2. PHP 汉字拼音互转

    <?PHP function Pinyin($_String, $_Code='gb2312'){ $_DataKey = "a|ai|an|ang|ao|ba|bai|ban|ban ...

  3. asp.net 字符串替换、截取和从字符串中最后某个字符 开始截取

    有时候要在一段字符串里面把某些字符替换成其他字符,怎么办? 例如: string image=@"csks/news/user_top/qqqq/qqqq.jpg"; image ...

  4. 手把手教你搭建深度学习平台——避坑安装theano+CUDA

    python有多混乱我就不多说了.这个混论不仅是指整个python市场混乱,更混乱的还有python的各种附加依赖包.为了一劳永逸解决python的各种依赖包对深度学习造成的影响,本文中采用pytho ...

  5. 【SQL语句】update ... ... from ......

    要求:修改vaj表中的vaj02字段的值,vaj02字段的值=cag.cag03的值,vaj 表与 cag 表无直接关联 实现: update vaj set vaj02=c.cag03 from l ...

  6. 数字对象NSNumber

    //将int类型转化成对象 ; NSNumber *numberString = [NSNumber numberWithInt:number]; //对象是可以放入数组的 NSArray *arra ...

  7. dedecms功能性函数封装(XSS过滤、编码、浏览器XSS hack、字符操作函数)

    dedecms虽然有诸多漏洞,但不可否认确实是一个很不错的内容管理系统(cms),其他也不乏很多功能实用性的函数,以下就部分列举,持续更新,不作过多说明.使用时需部分修改,你懂的 1.XSS过滤. f ...

  8. 解决bootstrap模态框内输入框无法获取焦点

    bootstrap 模态框中的input标签在某些情况下会无法获取焦点. 最终解决方法:去除模态框的 tabindex="-1" 属性即可

  9. chrome浏览器js 导出excel

    <table id="table"> <tr> <th>ID</th> <th>姓名</th> <th ...

  10. $.each ---- 跳出当前的循环

    有些朋友可能会以为在jquery跳出循环可以直接使用continue和break了,但是使用之后没有效果,因为在jquery中没有这两条命令.后来上网查了下,得到了结果:return false;—— ...