-
- package dream.start.util;
- import java.io.File;
- import java.io.IOException;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.commons.fileupload.FileItem;
- import org.apache.commons.fileupload.FileUploadException;
- import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
- import org.apache.commons.fileupload.disk.DiskFileItemFactory;
- import org.apache.commons.fileupload.servlet.ServletFileUpload;
- public class UploadFileUtil {
- //================文件大小错误
- public static final String MAXSIZEERROR = "maxsizeerror" ;
- //================文件格式错误
- public static final String FILEFORMATERROR = "fileformaterror" ;
- //================文件上传错误
- public static final String FILEUPLOADERROR = "fileuploaderror" ;
- public static final String SUCCESS = "success" ;
- //================设置上传文件最大为 3M
- private long maxSize = 10 * 1024 * 1024;
- //================文件上传的保存路径
- private String uploadPath = "F://test";
- private String newfileName ;
- //================允许上传的文件格式的列表
- private Map<String,String> allowedFormat = new HashMap<String,String>();
- private HttpServletRequest request ;
- private HttpServletResponse response ;
- public UploadFileUtil(HttpServletRequest request, HttpServletResponse response){
- this.request = request ;
- this.response = response ;
- allowedFormat.put("jpg", "jpg");
- allowedFormat.put("jpeg","jpeg");
- allowedFormat.put("gif", "gif");
- }
- public String upload() throws ServletException, IOException {
- response.setContentType("text/html");
- //================设置字符编码为UTF-8, 这样支持汉字显示
- response.setCharacterEncoding("UTF-8");
- //================实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
- DiskFileItemFactory dfif = new DiskFileItemFactory();
- //================设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘
- dfif.setSizeThreshold(4096);
- //================设置存放临时文件的目录,web根目录下的ImagesUploadTemp目录
- dfif.setRepository(new File(uploadPath));
- ServletFileUpload sfu = new ServletFileUpload(dfif);
- sfu.setSizeMax(maxSize);
- sfu.setHeaderEncoding("UTF-8") ;
- List fileList = null;
- try {
- fileList = sfu.parseRequest(request);
- }
- catch(SizeLimitExceededException e){
- //================处理文件尺寸过大异常
- return MAXSIZEERROR;
- }catch(FileUploadException e){
- e.printStackTrace();
- return FILEUPLOADERROR ;
- }
- //================没有选择上传文件后者文件大小为空
- if (fileList == null || fileList.size() == 0) {
- return MAXSIZEERROR;
- }
- //================得上传文件列表
- Iterator fileItr = fileList.iterator();
- while (fileItr.hasNext()) {
- String path = null;
- long size = 0;
- FileItem fileItem = (FileItem) fileItr.next();
- //================忽略简单form字段而不是上传域的文件域(<input type="text" />等)
- if (fileItem == null || fileItem.isFormField()) {
- continue;
- }
- //================得到文件的完整路径名称
- path = fileItem.getName();
- //================得到文件的大小
- size = fileItem.getSize();
- if ("".equals(path) || size == 0) {
- continue ;
- }
- //================得到去除路径的文件名
- String filename = path.substring(path.lastIndexOf(File.separator) + 1);
- //================得到文件的扩展名(无扩展名时将得到全名)
- String extname = filename.substring(filename.lastIndexOf(".") + 1);
- //================文件类型过滤
- if(allowedFormat.get(extname.toLowerCase())==null){
- continue ;
- }
- //================根据系统时间生成上传后保存的文件名
- String prefix = String.valueOf(System.currentTimeMillis());
- //================保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下
- newfileName = uploadPath+File.separator+ prefix + "." + extname;
- //System.out.println(newfileName) ;
- try{
- //================保存文件
- fileItem.write(new File(newfileName));
- }catch (Exception e) {
- e.printStackTrace();
- }
- }
- return SUCCESS ;
- }
- public Map<String, String> getAllowedFormat() {
- return allowedFormat;
- }
- /**
- * ******************文件格式过滤********************
- * @param allowedFormat .允许文件格式
- */
- public void setAllowedFormat(Map<String, String> allowedFormat) {
- this.allowedFormat = allowedFormat;
- }
- public long getMaxSize() {
- return maxSize;
- }
- /**
- * ******************最大的上传大小********************
- */
- public void setMaxSize(long maxSize) {
- this.maxSize = maxSize;
- }
- public String getUploadPath() {
- return uploadPath;
- }
- /**
- * ******************文件存储路径********************
- */
- public void setUploadPath(String uploadPath) {
- this.uploadPath = uploadPath;
- }
- public String getNewfileName() {
- return newfileName;
- }
- }
- import java.io.IOException;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import dream.start.util.UploadFileUtil;
- public class UploadServlet extends HttpServlet {
- public final static long serialVersionUID = 0l ;
- public UploadServlet() {
- super();
- }
- public void destroy() {
- super.destroy();
- }
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- UploadFileUtil u = new UploadFileUtil(request,response) ;
- u.setMaxSize(10*1024*1024) ;
- u.setUploadPath("F://test");
- u.upload() ;
- response.setContentType("text/xml");
- response.setCharacterEncoding("UTF-8");
- response.getWriter().append(u.getNewfileName());
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request, response);
- }
- }
代码二: