server 上传多个文件,修改文件名为 原文件名+系统时间戳
完整代码如下:
package com.commpim.performance;/** * @author beaver * @version 创建时间:2011-12-13 下午06:58:52 * 上传多个文件 */import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileReader;import java.io.IOException;import java.io.InputStream;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Iterator;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;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.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import org.apache.commons.fileupload.util.Streams;/** * Servlet implementation class for Servlet: UploadFile2Servlet * */ public class UploadFile2Servlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { //用于存放上传文件的目录 private String uploadPath="E:\\upFile\\"; private File tempPath=new File("E:\\upFile\\temp"); /** * 初始化Servlet,确保需要使用的目录都被建立<br> * @throws javax.servlet.ServletException */ @Override public void init() throws ServletException{ if(!new File(uploadPath).isDirectory()) new File(uploadPath).mkdir(); if(!tempPath.isDirectory()) tempPath.mkdir(); } /** * 销毁Servelt */ public void destory(){ super.destroy(); } /** * @param request * @param response * @throws javax.servlet.ServletException * @throws java.io.IOException */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //创建一个上传项目工厂,并设置其缓存数据大小和临时文件保存位置 DiskFileItemFactory factory=new DiskFileItemFactory(); factory.setSizeThreshold(4096); factory.setRepository(tempPath); //使用项目工厂创建一个ServletFileUpload对象,用于解析文件上传请求 //并设置可以上传的文件的最大字节数,超过会抛出异常 ServletFileUpload upload=new ServletFileUpload(factory); upload.setSizeMax(100000000); upload.setHeaderEncoding("utf-8"); List fileItems=null; try{ //开始读取上传信息 fileItems=upload.parseRequest(request); //依次处理每一个上传的文件 Iterator itor=fileItems.iterator(); //正则匹配,过滤路径取文件名 String regExp=".+\\\\(.+)$"; //过滤文件类型 String[] errorType={".exe",".com",".cgi",".asp"}; Pattern p=Pattern.compile(regExp); while(itor.hasNext()){ FileItem item=(FileItem)itor.next(); //忽略其他不是文件域的所有其他表单信息 if(!item.isFormField()){ String name=item.getName(); 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 type"); } } try{ //保存文件到指定的目录,如果是保存到数据库,改写这里 String fileName = name.substring(item.getName().lastIndexOf("\\")+1, name.length());//获得上传文件的文件名 String date=new SimpleDateFormat("yyyyMMddHHmmss").format(Calendar.getInstance().getTime()); fileName = fileName+"_"+date; String fn = uploadPath+fileName; File newf = new File(fn); if(!newf.exists()) { newf.createNewFile(); } InputStream in = item.getInputStream(); FileOutputStream fo = new FileOutputStream(newf); BufferedOutputStream out = new BufferedOutputStream(fo);//获得文件输出流 Streams.copy(in, out, true);//开始把文件写到你指定的上传文件夹 // item.write(new File(uploadPath,m.group(1))); }catch(Exception e){ } }else{ throw new IOException("fail to upload"); } } } }catch(IOException e){ e.printStackTrace(); }catch(FileUploadException e1){ e1.printStackTrace(); } } // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> /** * Handles the HTTP <code>GET</code> method. * @param request servlet request * @param response servlet response */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Handles the HTTP <code>POST</code> method. * @param request servlet request * @param response servlet response */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Returns a short description of the servlet. */ public String getServletInfo() { return "cliff"; } // </editor-fold>}