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 + " " + 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?

