当前位置:文档之家› Java文件上传类FileUploadUtil.java代码+注释

Java文件上传类FileUploadUtil.java代码+注释

∙一个通用的Java文件上传类,支持上传图片,支持生成缩略图,设置最大上传文件字节数,不设置时默认10M,可接收来自表单的数据,当有多个文件域时,只上传有文件的,忽略其他不是文件域的所有表单信息,支持用户对上传文件大小,字节进行设置,本上传类可过滤掉以下文件类型:".exe", ".com", ".cgi", ".asp", ".php", ".jsp"等,你可自已添加过滤的文件后缀,上传文件时如果没有上传目录,则自动创建它。

∙package com.gootrip.util;import java.io.File;import java.util.*;import mons.fileupload.*;import javax.servlet.http.HttpServletRequest;import java.util.regex.Pattern;import java.io.IOException;import mons.fileupload.servlet.ServletFileUpload;import mons.fileupload.disk.DiskFileItemFactory;import java.util.regex.Matcher;/*** TODO 要更改此生成的类型注释的模板,请转至* 窗口-首选项- Java -代码样式-代码模板*/public class FileUploadUtil {//当上传文件超过限制时设定的临时文件位置,注意是绝对路径private String tempPath = null;//文件上传目标目录,注意是绝对路径private String dstPath = null;//新文件名称,不设置时默认为原文件名private String newFileName = null;//获取的上传请求private HttpServletRequest fileuploadReq = null;//设置最多只允许在内存中存储的数据,单位:字节,这个参数不要设置太大private int sizeThreshold = 4096;//设置允许用户上传文件大小,单位:字节//共10Mprivate 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);Iterator iter = fileItems.iterator();// 正则匹配,过滤路径取文件名String regExp = ".+\\\\(.+)$";// 过滤掉的文件类型String[] errorType = {".exe", ".com", ".cgi", ".asp", ".php", ".jsp"};Pattern p = pile(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 + "");} 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;}/**从路径中获取单独文件*/public String GetFileName(String filepath){String returnstr = "*.*";int length = filepath.trim().length(); filepath = filepath.replace('\\', '/');if(length >0){int i = stIndexOf("/");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或JSP程序中,Java开发的朋友们,应该会轻易使用它。

相关主题