本文实例为大家分享了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获取文件行数
# 上传
# 上传文件
# 最多
# 临时文件
# 如果没有
# 只允许
# 多个
# 太大
# 将对
# 大家分享
# 表单
# 主要用于
# 写在
# 所占
# 非常大
# 具体内容
# 大家多多
# 文件上传
# 默认为
# 转至
相关文章:
Python文件管理规范_工程实践说明【指导】
建站之星会员如何解锁更多建站功能?
已有域名建站全流程解析:网站搭建步骤与建站工具选择
SQL查询语句优化的实用方法总结
网站插件制作软件免费下载,网页视频怎么下到本地插件?
如何在云主机上快速搭建多站点网站?
高防服务器租用指南:配置选择与快速部署攻略
如何打造高效商业网站?建站目的决定转化率
东莞专业制作网站的公司,东莞大学生网的网址是什么?
如何自定义建站之星网站的导航菜单样式?
如何快速建站并高效导出源代码?
如何选择可靠的免备案建站服务器?
官网网站制作腾讯审核要多久,联想路由器newifi官网
建站之星2.7模板:企业网站建设与h5定制设计专题
建站之星如何通过成品分离优化网站效率?
如何在IIS中配置站点IP、端口及主机头?
北京企业网站设计制作公司,北京铁路集团官方网站?
建站主机选购指南与交易推荐:核心配置解析
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
h5网站制作工具有哪些,h5页面制作工具有哪些?
如何用腾讯建站主机快速创建免费网站?
济南企业网站制作公司,济南社保单位网上缴费步骤?
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
如何基于PHP生成高效IDC网络公司建站源码?
C#如何使用XPathNavigator高效查询XML
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
如何快速搭建支持数据库操作的智能建站平台?
焦点电影公司作品,电影焦点结局是什么?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
建站之星2.7模板快速切换与批量管理功能操作指南
香港服务器建站指南:免备案优势与SEO优化技巧全解析
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
建站主机CVM配置优化、SEO策略与性能提升指南
如何通过虚拟机搭建网站?详细步骤解析
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
如何通过网站建站时间优化SEO与用户体验?
制作农业网站的软件,比较好的农业网站推荐一下?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
网站代码制作软件有哪些,如何生成自己网站的代码?
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
高端建站三要素:定制模板、企业官网与响应式设计优化
C++时间戳转换成日期时间的步骤和示例代码
如何快速上传建站程序避免常见错误?
宝塔建站后网页无法访问如何解决?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
建站ABC备案流程中有哪些关键注意事项?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
*请认真填写需求信息,我们会在24小时内与您取得联系。