Java FileUploadUtil工具类详解
程序员文章站
2024-02-25 19:21:09
本文实例为大家分享了fileuploadutil工具类的具体代码,供大家参考,具体内容如下
package com.gootrip.util;
import...
本文实例为大家分享了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利用递归调用实现树形菜单的样式