文件上传

package com.ad.web.servlet; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.net.URLEncoder; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONObject; 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.lang.StringEscapeUtils; import org.apache.log4j.Logger; import richinfo.rmapi.common.ReturnCode; import richinfo.tools.Tools; import cn.richinfo.cmail.common.config.PropertiesUtil; import com.ad.web.common.CommonConst; import com.ad.web.servlet.common.ImpProcess; import com.ad.web.servlet.common.Informations; /**  * 说明:个人通讯录人员导入入口类  * @author zxkj  *  */ public class FileUploadServlet extends HttpServlet {     private static final long serialVersionUID = 1L;     private static final Logger log = Logger.getLogger(FileUploadServlet.class);     final long MAX_SIZE = 1 * 1024 * 1024;// 设置上传文件最大为 1M     final String[] allowtype = new String[] { "csv", "vcf" }; // 允许上传的文件格式的列表     public FileUploadServlet()     {         super();     }     public void destroy()     {         super.destroy();     }     @SuppressWarnings( { "deprecation", "unchecked" })     @Override     protected void service(HttpServletRequest request,             HttpServletResponse response) throws ServletException, IOException     {         String rmkey = "";         String maindomain="";                  Cookie [] cookies=request.getCookies();         if(cookies!=null)         {             for(int i=0;i<cookies.length;i++)             {                 String cookieName = cookies[i].getName();                   if("maindomain".equals(cookieName))                 {                     maindomain=cookies[i].getValue();                 }                 if ("RMKEY".equals(cookieName)) {                     rmkey = cookies[i].getValue();                 }             }         }                  int imp_size=1;         String max=PropertiesUtil.getProperty(CommonConst.IMP_SIZE);         if(max!=null && !"".equals(max))         {             imp_size=Integer.parseInt(max);         }         String sid =request.getParameter("sid");                  String rp = request.getParameter("rp");                  String retr ="";         String fc=request.getParameter("func");         if(fc!=null && !"".equals(fc))         {             fc=StringEscapeUtils.escapeHtml(fc);             retr=URLEncoder.encode(fc, "UTF-8");         }                                    String path = null;         FileItem fileItem = null;         FileItem fileUploadItem = null;         File file=null;         response.setContentType("text/html");         response.setCharacterEncoding("utf-8");         // 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload         DiskFileItemFactory dfif = new DiskFileItemFactory();         // 设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘         dfif.setSizeThreshold(4 * 1024);         if (!(new File(request.getRealPath("/") + "uploadtemp").isDirectory()))         {             new File(request.getRealPath("/") + "uploadtemp").mkdir();         }         // 设置存放临时文件的目录,web根目录下的uploadtemp目录         dfif.setRepository(new File(request.getRealPath("/") + "uploadtemp"));         // 用以上工厂实例化上传组件         ServletFileUpload sfu = new ServletFileUpload(dfif);         sfu.setHeaderEncoding("utf-8");         // 设置最大上传尺寸         PrintWriter out = response.getWriter();         List fileList = null;         try         {             fileList = sfu.parseRequest(request);             // 没有文件上传             if (fileList == null || fileList.size() == 0)             {                 Informations.resMessage(out, "请选择上传文件", retr,maindomain);                 return;             }             // 得到所有上传的文件             Iterator fileItr = fileList.iterator();             // 循环处理所有文件             while (fileItr.hasNext())             {                 long size = 0;                 // 得到当前文件                 fileItem = (FileItem) fileItr.next();                 if (fileItem.isFormField())                 {                     String name = fileItem.getFieldName();                     String v = fileItem.getString();                     if ("sid".equals(name))                     {                         sid = v;                     }                     else if ("func".equals(name))                     {                         retr = v;                     }                     else if ("rp".equals(name))                     {                         rp = v;                     }                 }                 else                 {                     fileUploadItem=fileItem;                                          // 得到文件的完整路径                     path = fileItem.getName();                     // 得到文件的大小                     size = fileItem.getSize();                     if ("".equals(path) || size == 0)                     {                         Informations.resMessage(out, "请选择上传文件或上传文件为空", retr,maindomain);                         return;                     }                     if(size>(1024*1024*imp_size))                     {                         Informations.resMessage(out, "文件大小超过"+imp_size+"M", retr,maindomain);                         return;                     }                 }             }                          // 得到去除路径的文件名             String t_name = path.substring(path.lastIndexOf("\\") + 1);             // 得到文件的扩展名(无扩展名时将得到全名)             String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);             // 拒绝接受规定文件格式之外的文件类型             int allowFlag = 0;             int allowedExtCount = allowtype.length;             for (; allowFlag < allowedExtCount; allowFlag++)             {                 if (allowtype[allowFlag].equals(t_ext))                 {                     break;                 }                              }             if (allowFlag == allowedExtCount)             {                 String message = "";                 for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++)                 {                     message += "*." + allowtype[allowFlag] + " ";                 }                 Informations.resMessage(out, "请选择:" + message + "类型文件", retr,maindomain);                 return;             }             long now = System.currentTimeMillis();             // 根据系统时间生成上传后保存的文件名             String prefix = String.valueOf(now);             // 保存的最终文件完整路径,保存在web根目录下的upload目录下             if (!(new File(request.getRealPath("/") + "upload").isDirectory()))             {                 new File(request.getRealPath("/") + "upload").mkdir();             }             // 现在文件名             path = request.getRealPath("/") + "upload/" + prefix + "." + t_ext;             // 保存文件             fileUploadItem.write(new File(path));             // 开始处理上传文件,进行数据入库操作             String msg = ImpProcess.importUsers(path, sid, rp, t_ext,rmkey);             // 操作完成删除文件             file = new File(path);                     JSONObject jsonObject = JSONObject.fromObject(msg);             String code = jsonObject.get("code").toString();             if (Tools.isNotEmpty(code) && code.trim().equals(ReturnCode.S_OK))             {                 Informations.serviceMessage(out, msg, retr,maindomain);                 return;             }             else             {                 Informations.serviceMessage(out, msg, retr,maindomain);                 return;             }         }         catch (FileUploadException e)         {                          Informations.resMessage(out, "导入失败", retr,maindomain);             log.error("sid="+sid +" | result=failure",e);             return;                                   }         catch (Exception e)         {             Informations.resMessage(out, "导入失败", retr,maindomain);             log.error("sid="+sid+" | result=failure",e);         }         finally         {             if (out != null)             {                 out.close();             }             if(file!=null)             {                 if (file.exists())                 {                     file.delete();                 }             }         }     } }
相关文章
相关标签/搜索