package com.zy.oa.util; import java.io.*; import java.util.*; import java.sql.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.ServletInputStream; import javax.servlet.ServletException; /** * 该类提供文件上传服务 */ public class UpLoad{ private static String newline = "/n"; private String uploadDirectory = "D:/jakarta-tomcat-4.0.1/webapps/oa/upload"; private String ContentType = ""; private String CharacterEncoding = ""; private String strFileName = ""; private long iFileSize = 0; private Hashtable values = null; private Vector fileNames = null; private Vector originalFileNames = null; private Vector existFileNames = null; private String fileText = null; private String originalFileText = null; public UpLoad(){ values = new Hashtable(); fileNames = new Vector(); originalFileNames = new Vector(); AttachmentManage manageFileNames = new AttachmentManage(); Global global = new Global(); try { uploadDirectory = global.getVarValue(Global.UpLoadDir); } catch (Exception e) { e.printStackTrace(); } } private String getFileName(String s){ int i = s.lastIndexOf("//"); if(i < 0 || i >= s.length() - 1){ i = s.lastIndexOf("/"); if(i < 0 || i >= s.length() - 1) return s; } strFileName = s.substring(i + 1); // Logger.log(strFileName); return s.substring(i + 1); } public String getUploadFileName(){ return strFileName; } public long getFileSize(){ return iFileSize; } public void setUploadDirectory(String s){ uploadDirectory = s; Logger.log("上传路径是:" + s); } public void setContentType(String s){ ContentType = s; int j; if((j = ContentType.indexOf("boundary=")) != -1){ ContentType = ContentType.substring(j + 9); ContentType = "--" + ContentType; } } public void setCharacterEncoding(String s){ CharacterEncoding = s; } private String getName(String src){ int i = src.indexOf("name=/""); int j = src.lastIndexOf("/""); return new String(src.substring(i + 6, j)); } private String getValue(String src){ return null; } public Hashtable getValues(){ return this.values; } public Vector getFileNames(){ return this.fileNames; } public void uploadFile( HttpServletRequest req) throws ServletException, IOException{ //Logger.log(req.getCharacterEncoding()); //Logger.log(req.getContentType()); setCharacterEncoding(req.getCharacterEncoding()); setContentType(req.getContentType()); uploadFile(req.getInputStream()); } private void uploadFile( ServletInputStream servletinputstream) throws ServletException, IOException{ AttachmentManage manageFileNames = new AttachmentManage(); existFileNames = manageFileNames.getNameList(this.uploadDirectory); String filename = null; byte Linebyte[] = new byte[4096]; int ai[] = new int[1]; String line= null; String fileTextTemp = ""; // while((line=readLine(Linebyte, ai, servletinputstream, CharacterEncoding))!=null) // {Logger.log(line);} do{ // 得到文件名 //如果最后读出的一行包括文件名则直接对这行处理 if (line != null && line.indexOf("filename=") >= 0){ // String aline = ""; // aline = new String(line); int j = line.indexOf("name="); if(j>=0){ line = line.substring(j + 6); fileTextTemp = line.substring(0,line.indexOf("/"")); } int i = line.indexOf("filename="); if(i >= 0){ line = line.substring(i + 10); if((i = line.indexOf("/"")) > 0) line = line.substring(0, i); break; } // int j = aline.indexOf("name="); } else{ //读出的最后一行不包括文件名,则继续读取 while((line = readLine(Linebyte, ai, servletinputstream, CharacterEncoding)) != null){ // Logger.log(line); //得到文件的name域 int j = line.indexOf("name="); if(j>=0){ line = line.substring(j + 6); fileTextTemp = line.substring(0,line.indexOf("/"")); } int i = line.indexOf("filename="); if(i >= 0){ line = line.substring(i + 10); if((i = line.indexOf("/"")) > 0) line = line.substring(0, i); break; } } } //filename 为文件的路径 和文件名 filename = line; //得到文件名 如果文件名正常 则开始读入上载文件 if(filename != null && (filename.indexOf("/"") == -1)){ int Conflict_ID = 0; filename = getFileName(filename); //保存原始信息 if(!fileTextTemp.equals("text")) this.originalFileNames.add(new String(filename)); else this.originalFileText = filename; //如果附件列表中 则改名防止冲突 if(existFileNames.contains(filename)){ try{ Conflict_ID = KeyGenerator.getNewId("Conflict_ID"); }catch(SQLException e){e.printStackTrace();} filename = Conflict_ID + "_" + filename; } // 如果文件列表中不包含该文件 并且不是正文,则加入 if(!this.fileNames.contains(filename) && (!fileTextTemp.equals("text"))) this.fileNames.add(new String(filename)); else//正文的名字 fileText = new String(filename); String sContentType = readLine(Linebyte, ai, servletinputstream, CharacterEncoding); if (sContentType != null) if(sContentType.indexOf("Content-Type") >= 0) readLine(Linebyte, ai, servletinputstream, CharacterEncoding); File file = null; FileOutputStream fileoutputstream = null; try{ file = new File(uploadDirectory, filename); fileoutputstream = new FileOutputStream(file); }catch(Exception e){e.printStackTrace();} String tempStr = readLine(Linebyte, ai, servletinputstream, CharacterEncoding); // Logger.log(tempStr); // 读上载文件 while((tempStr != null)&&(tempStr.indexOf(this.ContentType) == -1)){ // Logger.log(tempStr); fileoutputstream.write(Linebyte, 0, ai[0]); tempStr = readLine(Linebyte, ai, servletinputstream, CharacterEncoding); line = tempStr; }//end while // fileoutputstream.flush(); fileoutputstream.close(); }//end if // System.out.println("line:" + line); }while(line != null); } private String readLine(byte Linebyte[], int ai[], ServletInputStream servletinputstream, String CharacterEncoding){ try{ ai[0] = servletinputstream.readLine(Linebyte, 0, Linebyte.length); if(ai[0] == -1) return null; }catch(IOException _ex){ _ex.printStackTrace(); return null; } try{ if(CharacterEncoding == null){ //用缺省的编码方式把给定的byte数组转换为字符串 return new String(Linebyte, 0, ai[0]); }else{ //用给定的编码方式把给定的byte数组转换为字符串 return new String(Linebyte, 0, ai[0], CharacterEncoding); } }catch(Exception _ex){ _ex.printStackTrace(); return null; } } public String getUploadDirectory() { return uploadDirectory; } public String getFileText() { return fileText; } public Vector getOriginalFileNames() { return originalFileNames; } public String getOriginalFileText() { return originalFileText; } } |
servlet upload
最新推荐文章于 2022-12-08 17:42:55 发布