• upload4j安全、高效、易用的java http文件上传框架


    简介

         

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

  • 相关阅读:
    去除UINavigationBar的下边框
    struts2配置log
    GET和POST方式的乱码问题
    Eclipse中导入MyEclipse生成的war包
    TOMCAT管理页面部署WAR包 大小超出上限
    Java死锁 Thread Dump分析
    自定义标签之IterationTag
    Chart.js学习
    计数排序
    练手系列之旋转字符串
  • 原文地址:https://www.cnblogs.com/iyangyuan/p/4835952.html
Copyright © 2020-2023  润新知