FileUploadUtil----文件上传工具类

  1 package com.gootrip.util;
  2
  3 import java.io.File;
  4 import java.util.*;
  5 import org.apache.commons.fileupload.*;
  6 import javax.servlet.http.HttpServletRequest;
  7 import java.util.regex.Pattern;
  8 import java.io.IOException;
  9 import org.apache.commons.fileupload.servlet.ServletFileUpload;
 10 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 11 import java.util.regex.Matcher;
 12
 13
 14 /**
 16  * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 17  */
 18 public class FileUploadUtil {
 19
 20     //当上传文件超过限制时设定的临时文件位置,注意是绝对路径
 21     private String tempPath = null;
 22
 23     //文件上传目标目录,注意是绝对路径
 24     private String dstPath = null;
 25
 26     //新文件名称,不设置时默认为原文件名
 27     private String newFileName = null;
 28     //获取的上传请求
 29     private HttpServletRequest fileuploadReq = null;
 30
 31     //设置最多只允许在内存中存储的数据,单位:字节,这个参数不要设置太大
 32     private int sizeThreshold = 4096;
 33
 34     //设置允许用户上传文件大小,单位:字节
 35     //共10M
 36     private long sizeMax = 10485760;
 37
 38     //图片文件序号
 39     private int picSeqNo = 1;
 40
 41     private boolean isSmallPic = false;
 42
 43     public FileUploadUtil(){
 44     }
 45
 46     public FileUploadUtil(String tempPath, String destinationPath){
 47         this.tempPath  = tempPath;
 48         this.dstPath = destinationPath;
 49     }
 50
 51     public FileUploadUtil(String tempPath, String destinationPath, HttpServletRequest fileuploadRequest){
 52         this.tempPath   = tempPath;
 53         this.dstPath = destinationPath;
 54         this.fileuploadReq = fileuploadRequest;
 55     }
 56
 57     /** 文件上载
 58      * @return true —— success; false —— fail.
 59      */
 60     public boolean Upload(){
 61         DiskFileItemFactory factory = new DiskFileItemFactory();
 62
 63         try {
 64
 65             //如果没有上传目的目录,则创建它
 66             FileUtil.makeDirectory(dstPath+"/ddd");
 67             /*if (!FileUtil.makeDirectory(dstPath+"/ddd")) {
 68                 throw new IOException("Create destination Directory Error.");
 69             }*/
 70             //如果没有临时目录,则创建它
 71             FileUtil.makeDirectory(tempPath+"/ddd");
 72             /*if (!FileUtil.makeDirectory(tempPath+"/ddd")) {
 73                 throw new IOException("Create Temp Directory Error.");
 74             }*/
 75
 76             //上传项目只要足够小,就应该保留在内存里。
 77             //较大的项目应该被写在硬盘的临时文件上。
 78             //非常大的上传请求应该避免。
 79             //限制项目在内存中所占的空间,限制最大的上传请求,并且设定临时文件的位置。
 80
 81             //设置最多只允许在内存中存储的数据,单位:字节
 82             factory.setSizeThreshold(sizeThreshold);
 83             // the location for saving data that is larger than getSizeThreshold()
 84             factory.setRepository(new File(tempPath));
 85
 86             ServletFileUpload upload = new ServletFileUpload(factory);
 87             //设置允许用户上传文件大小,单位:字节
 88             upload.setSizeMax(sizeMax);
 89
 90             List fileItems = upload.parseRequest(fileuploadReq);
 91             // assume we know there are two files. The first file is a small
 92             // text file, the second is unknown and is written to a file on
 93             // the server
 94             Iterator iter = fileItems.iterator();
 95
 96             //  正则匹配,过滤路径取文件名
 97             String regExp = ".+\\\\(.+)$";
 98
 99             //  过滤掉的文件类型
100             String[] errorType = {".exe", ".com", ".cgi", ".asp", ".php", ".jsp"};
101             Pattern p = Pattern.compile(regExp);
102             while (iter.hasNext()) {
103                 System.out.println("++00++====="+newFileName);
104                 FileItem item = (FileItem) iter.next();
105                 //忽略其他不是文件域的所有表单信息
106                 if (!item.isFormField()) {
107                     String name = item.getName();
108                     System.out.println("++++====="+name);
109                     long size = item.getSize();
110                     //有多个文件域时,只上传有文件的
111                     if ((name == null || name.equals("")) && size == 0)
112                         continue;
113                     Matcher m = p.matcher(name);
114                     boolean result = m.find();
115                     if (result) {
116                         for (int temp = 0; temp < errorType.length; temp++) {
117                             if (m.group(1).endsWith(errorType[temp])) {
118                                 throw new IOException(name + ": Wrong File Type");
119                             }
120                         }
121                         String ext = "."+FileUtil.getTypePart(name);
122                         try {
123                             //保存上传的文件到指定的目录
124                             //在下文中上传文件至数据库时,将对这里改写
125                             //没有指定新文件名时以原文件名来命名
126                             if (newFileName == null || newFileName.trim().equals(""))
127                             {
128                                 item.write(new File(dstPath +"/"+ m.group(1)));
129                             }
130                             else
131                             {
132                                 String uploadfilename = "";
133                                 if (isSmallPic)
134                                 {
135                                     uploadfilename = dstPath +"/"+ newFileName+"_"+picSeqNo+"_small"+ext;
136                                 }
137                                 else
138                                 {
139                                     uploadfilename = dstPath +"/"+ newFileName+"_"+picSeqNo+ext;
140                                 }
141                                 //生成所有未生成的目录
142                                 System.out.println("++++====="+uploadfilename);
143                                 FileUtil.makeDirectory(uploadfilename);
144                                 //item.write(new File(dstPath +"/"+ newFileName));
145                                 item.write(new File(uploadfilename));
146                             }
147                             picSeqNo++;
148                             //out.print(name + "&nbsp;&nbsp;" + size + "<br>");
149                         } catch (Exception e) {
150                             //out.println(e);
151                             throw new IOException(e.getMessage());
152                         }
153                     } else {
154                         throw new IOException("fail to upload");
155                     }
156                 }
157             }
158         } catch (IOException e) {
159             System.out.println(e);
160         } catch (FileUploadException e) {
161             System.out.println(e);
162         }
163         return true;
164     }
165
166     /**从路径中获取单独文件名
167      * @author
168      *
169      * TODO 要更改此生成的类型注释的模板,请转至
170      * 窗口 - 首选项 - Java - 代码样式 - 代码模板
171      */
172     public String GetFileName(String filepath)
173     {
174         String returnstr = "*.*";
175         int length       = filepath.trim().length();
176
177         filepath = filepath.replace(‘\\‘, ‘/‘);
178         if(length >0)
179         {
180             int i = filepath.lastIndexOf("/");
181             if (i >= 0)
182             {
183                 filepath  = filepath.substring(i + 1);
184                 returnstr = filepath;
185             }
186         }
187         return returnstr;
188     }
189     /**
190      * 设置临时存贮目录
191      */
192     public void setTmpPath(String tmppath)
193     {
194         this.tempPath = tmppath;
195     }
196     /**
197      * 设置目标目录
198      */
199     public void setDstPath(String dstpath) {
200         this.dstPath = dstpath;
201     }
202     /**
203      * 设置最大上传文件字节数,不设置时默认10M
204      */
205     public void setFileMaxSize(long maxsize) {
206         this.sizeMax = maxsize;
207     }
208     /**
209      * 设置Http 请求参数,通过这个能数来获取文件信息
210      */
211     public void setHttpReq(HttpServletRequest httpreq) {
212         this.fileuploadReq = httpreq;
213     }
214     /**
215      * 设置Http 请求参数,通过这个能数来获取文件信息
216      */
217     public void setNewFileName(String filename) {
218         this.newFileName = filename;
219     }
220
221     /**
222      * 设置此上传文件是否是缩略图文件,这个参数主要用于缩略图命名
223      */
224     public void setIsSmalPic(boolean isSmallPic) {
225         this.isSmallPic = isSmallPic;
226     }
227
228     /**
229      * 设置Http 请求参数,通过这个能数来获取文件信息
230      */
231     public void setPicSeqNo(int seqNo) {
232         this.picSeqNo = seqNo;
233     }
234
235
236 }
时间: 2024-11-03 22:05:07

FileUploadUtil----文件上传工具类的相关文章

文件上传工具类(重命名,以及判断类型)

public class FileUploadUtil {     public static final List<String> ALLOW_TYPES = Arrays.asList(             "image/jpg","image/jpeg","image/png","image/gif"     ); //文件重命名     public static String rename(Strin

spring mvc 文件上传工具类

虽然文件上传在框架中,已经不是什么困难的事情了,但自己还是开发了一个文件上传工具类,是基于springmvc文件上传的. 工具类只需要传入需要的两个参数,就可以上传到任何想要上传的路径: 参数1:HttpServletRequest request 参数2:String storePath   //文件存储相对路径 ,例如:"/upload","/image","/local/file" 返回值:上传到服务器的相对路径 一:代码实现 import

文件上传工具类 UploadUtil.java

package com.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util

文件上传工具类——傻瓜式上传文件

转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6128382.html 在前面  (http://www.cnblogs.com/ygj0930/p/6073505.html)  我们提到过Javaweb开发的文件上传功能的实现,需要借助第三方jar包,并且要创建factory呀.设置临时文件区路径呀等等,十分繁琐.而作为一个开发人员,不可能每次实现文件上传时都从头到尾做那么多工序.这时候,我们可以把这些繁琐的工作封装起来,把一个个功能做成以供调用的方法.

iOS开发 - 封装文件上传工具类

文件上传的步骤 1.设置请求头 * 目的:告诉服务器请求体里面的内容并非普通的参数,而是包含了文件参数 [request setValue:@"multipart/form-data; boundary=maljob" forHTTPHeaderField:@"Content-Type"]; 2.设置请求体 * 作用:存放参数(文件参数和非文件参数) 1> 非文件参数 [body appendData:MalJobEncode(@"--maljob\

文件上传工具swfupload[转]

转至:http://zhangqgc.iteye.com/blog/906419 文件上传工具swfupload 示例: 1.JavaScript设置SWFUpload部分(与官方例子类似): var upload; window.onload = function() { upload = new SWFUpload({ // 处理文件上传的url upload_url: "${pageContext.request.contextPath}/swfupload/example.jsp?upl

文件上传帮助类

using System; using System.Collections.Generic; using System.Text; using System.Web.UI.WebControls; using System.IO; namespace AIMSCommon { /// <summary> /// 文件上传帮助类 /// </summary> public class UploadHelper { /// <summary> /// 文件上传 /// &

PHP 图片上传工具类(支持多文件上传)

====================ImageUploadTool======================== <?php class ImageUploadTool { private $file; //文件信息 private $fileList; //文件列表 private $inputName; //标签名称 private $uploadPath; //上传路径 private $fileMaxSize; //最大尺寸 private $uploadFiles; //上传文件

django-自定义文件上传存储类

文件储存API:https://yiyibooks.cn/xx/django_182/ref/files/storage.html 编写自定义存储系统:https://yiyibooks.cn/xx/django_182/howto/custom-file-storage.html 定义一个自定义的储存类步骤 1.你的自定义储存类必须是django.core.files.storage.Storage的子类 2.Django必须能够不带任何参数来实例化你的储存类.这意味着任何设置都应该从djan