Java FileUploadUtil工具类详解

发布时间 - 2026-01-11 03:07:42    点击率:

本文实例为大家分享了FileUploadUtil工具类的具体代码,供大家参考,具体内容如下

package com.gootrip.util;

import java.io.File;
import java.util.*;
import org.apache.commons.fileupload.*;
import javax.servlet.http.HttpServletRequest;
import java.util.regex.Pattern;
import java.io.IOException;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import java.util.regex.Matcher;

public class FileUploadUtil {

  //当上传文件超过限制时设定的临时文件位置,注意是绝对路径
  private String tempPath = null;

  //文件上传目标目录,注意是绝对路径
  private String dstPath = null;

  //新文件名称,不设置时默认为原文件名
  private String newFileName = null;
  //获取的上传请求
  private HttpServletRequest fileuploadReq = null;

  //设置最多只允许在内存中存储的数据,单位:字节,这个参数不要设置太大
  private int sizeThreshold = 4096;

  //设置允许用户上传文件大小,单位:字节
  //共10M
  private long sizeMax = 10485760;

  //图片文件序号
  private int picSeqNo = 1;

  private boolean isSmallPic = false;

  public FileUploadUtil(){
  }

  public FileUploadUtil(String tempPath, String destinationPath){
    this.tempPath = tempPath;
    this.dstPath = destinationPath;
  }

  public FileUploadUtil(String tempPath, String destinationPath, HttpServletRequest fileuploadRequest){
    this.tempPath  = tempPath;
    this.dstPath = destinationPath;
    this.fileuploadReq = fileuploadRequest;
  }

  /** 文件上载
   * @return true —— success; false —— fail.
   */
  public boolean Upload(){
    DiskFileItemFactory factory = new DiskFileItemFactory();

    try {

      //如果没有上传目的目录,则创建它
      FileUtil.makeDirectory(dstPath+"/ddd");
      /*if (!FileUtil.makeDirectory(dstPath+"/ddd")) {
        throw new IOException("Create destination Directory Error.");
      }*/
      //如果没有临时目录,则创建它
      FileUtil.makeDirectory(tempPath+"/ddd");
      /*if (!FileUtil.makeDirectory(tempPath+"/ddd")) {
        throw new IOException("Create Temp Directory Error.");
      }*/

      //上传项目只要足够小,就应该保留在内存里。
      //较大的项目应该被写在硬盘的临时文件上。
      //非常大的上传请求应该避免。
      //限制项目在内存中所占的空间,限制最大的上传请求,并且设定临时文件的位置。

      //设置最多只允许在内存中存储的数据,单位:字节
      factory.setSizeThreshold(sizeThreshold);
      // the location for saving data that is larger than getSizeThreshold()
      factory.setRepository(new File(tempPath));

      ServletFileUpload upload = new ServletFileUpload(factory);
      //设置允许用户上传文件大小,单位:字节
      upload.setSizeMax(sizeMax);

      List fileItems = upload.parseRequest(fileuploadReq);
      // assume we know there are two files. The first file is a small
      // text file, the second is unknown and is written to a file on
      // the server
      Iterator iter = fileItems.iterator();

      // 正则匹配,过滤路径取文件名
      String regExp = ".+\\\\(.+)$";

      // 过滤掉的文件类型
      String[] errorType = {".exe", ".com", ".cgi", ".asp", ".php", ".jsp"};
      Pattern p = Pattern.compile(regExp);
      while (iter.hasNext()) {
        System.out.println("++00++====="+newFileName);
        FileItem item = (FileItem) iter.next();
        //忽略其他不是文件域的所有表单信息
        if (!item.isFormField()) {
          String name = item.getName();
          System.out.println("++++====="+name);
          long size = item.getSize();
          //有多个文件域时,只上传有文件的
          if ((name == null || name.equals("")) && size == 0)
            continue;
          Matcher m = p.matcher(name);
          boolean result = m.find();
          if (result) {
            for (int temp = 0; temp < errorType.length; temp++) {
              if (m.group(1).endsWith(errorType[temp])) {
                throw new IOException(name + ": Wrong File Type");
              }
            }
            String ext = "."+FileUtil.getTypePart(name);
            try {
              //保存上传的文件到指定的目录
              //在下文中上传文件至数据库时,将对这里改写
              //没有指定新文件名时以原文件名来命名
              if (newFileName == null || newFileName.trim().equals(""))
              {
                item.write(new File(dstPath +"/"+ m.group(1)));
              }
              else
              {
                String uploadfilename = "";
                if (isSmallPic)
                {
                  uploadfilename = dstPath +"/"+ newFileName+"_"+picSeqNo+"_small"+ext;
                }
                else
                {
                  uploadfilename = dstPath +"/"+ newFileName+"_"+picSeqNo+ext;
                }
                //生成所有未生成的目录
                System.out.println("++++====="+uploadfilename);
                FileUtil.makeDirectory(uploadfilename);
                //item.write(new File(dstPath +"/"+ newFileName));
                item.write(new File(uploadfilename));
              }
              picSeqNo++;
              //out.print(name + "&nbsp;&nbsp;" + size + "<br>");
            } catch (Exception e) {
              //out.println(e);
              throw new IOException(e.getMessage());
            }
          } else {
            throw new IOException("fail to upload");
          }
        }
      }
    } catch (IOException e) {
      System.out.println(e);
    } catch (FileUploadException e) {
      System.out.println(e);
    }
    return true;
  }

  /**从路径中获取单独文件名
   * @author
   *
   * TODO 要更改此生成的类型注释的模板,请转至
   * 窗口 - 首选项 - Java - 代码样式 - 代码模板
   */
  public String GetFileName(String filepath)
  {
    String returnstr = "*.*";
    int length    = filepath.trim().length();

    filepath = filepath.replace('\\', '/');
    if(length >0)
    {
      int i = filepath.lastIndexOf("/");
      if (i >= 0)
      {
        filepath = filepath.substring(i + 1);
        returnstr = filepath;
      }
    }
    return returnstr;
  }
  /**
   * 设置临时存贮目录
   */
  public void setTmpPath(String tmppath)
  {
    this.tempPath = tmppath;
  }
  /**
   * 设置目标目录
   */
  public void setDstPath(String dstpath) {
    this.dstPath = dstpath;
  }
  /**
   * 设置最大上传文件字节数,不设置时默认10M
   */
  public void setFileMaxSize(long maxsize) {
    this.sizeMax = maxsize;
  }
  /**
   * 设置Http 请求参数,通过这个能数来获取文件信息
   */
  public void setHttpReq(HttpServletRequest httpreq) {
    this.fileuploadReq = httpreq;
  }
  /**
   * 设置Http 请求参数,通过这个能数来获取文件信息
   */
  public void setNewFileName(String filename) {
    this.newFileName = filename;
  }

  /**
   * 设置此上传文件是否是缩略图文件,这个参数主要用于缩略图命名
   */
  public void setIsSmalPic(boolean isSmallPic) {
    this.isSmallPic = isSmallPic;
  }

  /**
   * 设置Http 请求参数,通过这个能数来获取文件信息
   */
  public void setPicSeqNo(int seqNo) {
    this.picSeqNo = seqNo;
  }


}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Java  # FileUploadUtil  # 工具类  # java常用工具类之DES和Base64加密解密类  # java正则表达式表单验证类工具类(验证邮箱、手机号码、qq号码等)  # java连接数据库增、删、改、查工具类  # java使用jdbc连接数据库工具类和jdbc连接mysql数据示例  # java常用工具类之数据库连接类(可以连接多种数据库)  # java实现excel导入数据的工具类  # java常用工具类之Excel操作类及依赖包下载  # Java中StringUtils工具类的一些用法实例  # java文件操作工具类分享(file文件工具类)  # java工具类之实现java获取文件行数  # 上传  # 上传文件  # 最多  # 临时文件  # 如果没有  # 只允许  # 多个  # 太大  # 将对  # 大家分享  # 表单  # 主要用于  # 写在  # 所占  # 非常大  # 具体内容  # 大家多多  # 文件上传  # 默认为  # 转至 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: JavaScript如何实现继承_有哪些常用方法  jquery插件bootstrapValidator表单验证详解  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  网站制作价目表怎么做,珍爱网婚介费用多少?  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  企业网站制作这些问题要关注  Laravel如何与Inertia.js和Vue/React构建现代单页应用  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  Bootstrap整体框架之CSS12栅格系统  javascript日期怎么处理_如何格式化输出  Laravel怎么清理缓存_Laravel optimize clear命令详解  Python正则表达式进阶教程_复杂匹配与分组替换解析  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  Laravel如何实现API速率限制?(Rate Limiting教程)  零基础网站服务器架设实战:轻量应用与域名解析配置指南  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  如何用景安虚拟主机手机版绑定域名建站?  Laravel如何记录自定义日志?(Log频道配置)  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  微信小程序 scroll-view组件实现列表页实例代码  linux写shell需要注意的问题(必看)  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  LinuxCD持续部署教程_自动发布与回滚机制  详解Android中Activity的四大启动模式实验简述  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  如何实现建站之星域名转发设置?  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  C#如何调用原生C++ COM对象详解  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  微信小程序 HTTPS报错整理常见问题及解决方案  Laravel如何实现模型的全局作用域?(Global Scope示例)  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  如何在阿里云服务器自主搭建网站?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  无锡营销型网站制作公司,无锡网选车牌流程?  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  Python高阶函数应用_函数作为参数说明【指导】  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  如何快速搭建个人网站并优化SEO?