JSP虚拟主机,jsp空间,java空间,java虚拟空间JSP虚拟主机,jsp空间,java空间,java虚拟空间

如何在Web页上实现文件上传



作者:Unkown    文章来源:www.jspcn.net
发布日期:2004年01月16日    浏览次数:7697次
public class UploadServlet extends HttpServlet 

 //default maximum allowable file size is 100k 
 static final int MAX_SIZE = 102400; 
 //instance variables to store root and success message 
 String rootPath, successMessage; 
 /** 
  * init method is called when servlet is initialized. 
  */ 
 public void init(ServletConfig config) throws ServletException 
 { 
  super.init(config); 
  //get path in which to save file 
  rootPath = config.getInitParameter("RootPath"); 
  if (rootPath == null) 
  { 
   rootPath = "/"; 
  } 
  /*Get message to show when upload is complete. Used only if 
   a success redirect page is not supplied.*/ 
  successMessage = config.getInitParameter("SuccessMessage"); 
  if (successMessage == null) 
  { 
   successMessage = "File upload complete!"; 
  } 
 } 
 /** 
  * doPost reads the uploaded data from the request and writes 
  * it to a file. 
  */ 
 public void doPost(HttpServletRequest request, 
  HttpServletResponse response) 
 { 
  ServletOutputStream out=null; 
  DataInputStream in=null; 
  FileOutputStream fileOut=null; 
  try 
  { 
   /*set content type of response and get handle to output 
    stream in case we are unable to redirect client*/ 
   response.setContentType("text/plain"); 
   out = response.getOutputStream(); 
  } 
  catch (IOException e) 
  { 
   //print error message to standard out 
   System.out.println("Error getting output stream."); 
   System.out.println("Error description: " + e); 
   return; 
  } 
  try 
  { 
   //get content type of client request 
   String contentType = request.getContentType(); 
   //make sure content type is multipart/form-data 
   if(contentType != null && contentType.indexOf( 
    "multipart/form-data") != -1) 
   { 
    //open input stream from client to capture upload file 
    in = new DataInputStream(request.getInputStream()); 
    //get length of content data 
    int formDataLength = request.getContentLength(); 
    //allocate a byte array to store content data 
    byte dataBytes[] = new byte[formDataLength]; 
    //read file into byte array 
    int bytesRead = 0; 
    int totalBytesRead = 0; 
    int sizeCheck = 0; 
    while (totalBytesRead < formDataLength) 
    { 
     //check for maximum file size violation 
     sizeCheck = totalBytesRead + in.available(); 
     if (sizeCheck > MAX_SIZE) 
     { 
      out.println("Sorry, file is too large to upload."); 
      return; 
     } 
     bytesRead = in.read(dataBytes, totalBytesRead, 
      formDataLength); 
     totalBytesRead += bytesRead; 
    } 
    //create string from byte array for easy manipulation 
    String file = new String(dataBytes); 
    //since byte array is stored in string, release memory 
    dataBytes = null; 
    /*get boundary value (boundary is a unique string that 
     separates content data)*/ 
    int lastIndex = contentType.lastIndexOf("="); 
    String boundary = contentType.substring(lastIndex+1, 
     contentType.length()); 
    //get Directory web variable from request 
    String directory=""; 
    if (file.indexOf("name="Directory"") > 0) 
    { 
     directory = file.substring( 
      file.indexOf("name="Directory"")); 
     //remove carriage return 
     directory = directory.substring( 
      directory.indexOf("n")+1); 
     //remove carriage return 
     directory = directory.substring( 
      directory.indexOf("n")+1); 
     //get Directory 
     directory = directory.substring(0, 
      directory.indexOf("n")-1); 
     /*make sure user didn't select a directory higher in 
      the directory tree*/ 
     if (directory.indexOf("..") > 0) 
     { 
      out.println("Security Error: You can't upload " + 
       "to a directory higher in the directory tree."); 
      return; 
     } 
    } 
    //get SuccessPage web variable from request 
    String successPage=""; 
    if (file.indexOf("name="SuccessPage"") > 0) 
    { 
     successPage = file.substring( 
      file.indexOf("name="SuccessPage"")); 
     //remove carriage return 
     successPage = successPage.substring( 
      successPage.indexOf("n")+1); 
     //remove carriage return 
     successPage = successPage.substring( 
      successPage.indexOf("n")+1); 
     //get success page 
     successPage = successPage.substring(0, 
      successPage.indexOf("n")-1); 
    } 
    //get OverWrite flag web variable from request 
    String overWrite; 
    if (file.indexOf("name="OverWrite"") > 0) 
    { 
     overWrite = file.substring( 
      file.indexOf("name="OverWrite"")); 
     //remove carriage return 
     overWrite = overWrite.substring( 
      overWrite.indexOf("n")+1); 
     //remove carriage return 
     overWrite = overWrite.substring( 
      overWrite.indexOf("n")+1); 
     //get overwrite flag 
     overWrite = overWrite.substring(0, 
      overWrite.indexOf("n")-1); 
    } 
    else 
    { 
     overWrite = "false"; 
    } 
    //get OverWritePage web variable from request 
    String overWritePage=""; 
    if (file.indexOf("name="OverWritePage"") > 0) 
    { 
     overWritePage = file.substring( 
      file.indexOf("name="OverWritePage"")); 
     //remove carriage return 
     overWritePage = overWritePage.substring( 
      overWritePage.indexOf("n")+1); 
     //remove carriage return 
     overWritePage = overWritePage.substring( 
      overWritePage.indexOf("n")+1); 
     //get overwrite page 
     overWritePage = overWritePage.substring(0, 
      overWritePage.indexOf("n")-1); 
    } 
    //get filename of upload file 
    String saveFile = file.substring( 
     file.indexOf("filename="")+10); 
    saveFile = saveFile.substring(0, 
     saveFile.indexOf("n")); 
    saveFile = saveFile.substring( 
     saveFile.lastIndexOf("")+1, 
     saveFile.indexOf(""")); 
    /*remove boundary markers and other multipart/form-data 
     tags from beginning of upload file section*/ 
    int pos; //position in upload file 
    //find position of upload file section of request 
    pos = file.indexOf("filename=""); 
    //find position of content-disposition line 
    pos = file.indexOf("n",pos)+1; 
    //find position of content-type line 
    pos = file.indexOf("n",pos)+1; 
    //find position of blank line 
    pos = file.indexOf("n",pos)+1; 
    /*find the location of the next boundary marker 
     (marking the end of the upload file data)*/ 
    int boundaryLocation = file.indexOf(boundary,pos)-4; 
    //upload file lies between pos and boundaryLocation 
    file = file.substring(pos,boundaryLocation); 
    //build the full path of the upload file 
    String fileName = new String(rootPath + directory + 
     saveFile); 
    //create File object to check for existence of file 
    File checkFile = new File(fileName); 
    if (checkFile.exists()) 
    { 
     /*file exists, if OverWrite flag is off, give 
      message and abort*/ 
     if (!overWrite.toLowerCase().equals("true")) 
     { 
      if (overWritePage.equals("")) 
      { 
       /*OverWrite HTML page URL not received, respond 
        with generic message*/ 
       out.println("Sorry, file already exists."); 
      } 
      else 
      { 
       //redirect client to OverWrite HTML page 
       response.sendRedirect(overWritePage); 
      } 
      return; 
     } 
    } 
    /*create File object to check for existence of 
     Directory*/ 
    File fileDir = new File(rootPath + directory); 
    if (!fileDir.exists()) 
    { 
     //Directory doesn't exist, create it 
     fileDir.mkdirs(); 
    } 
    //instantiate file output stream 
    fileOut = new FileOutputStream(fileName); 
    //write the string to the file as a byte array 
    fileOut.write(file.getBytes(),0,file.length()); 
    if (successPage.equals("")) 
    { 
     /*success HTML page URL not received, respond with 
      generic success message*/ 
     out.println(successMessage); 
     out.println("File written to: " + fileName); 
    } 
    else 
    { 
     //redirect client to success HTML page 
     response.sendRedirect(successPage); 
    } 
   } 
   else //request is not multipart/form-data 
   { 
    //send error message to client 
    out.println("Request not multipart/form-data."); 
   } 
  } 
  catch(Exception e) 
  { 
   try 
   { 
    //print error message to standard out 
    System.out.println("Error in doPost: " + e); 
    //send error message to client 
    out.println("An unexpected error has occurred."); 
    out.println("Error description: " + e); 
   } 
   catch (Exception f) {} 
  } 
  finally 
  { 
   try 
   { 
    fileOut.close(); //close file output stream 
   } 
   catch (Exception f) {} 
   try 
   { 
    in.close(); //close input stream from client 
   } 
   catch (Exception f) {} 
   try 
   { 
    out.close(); //close output stream to client 
   } 
   catch (Exception f) {} 
  } 
 } 
Copyright © 2002-2012 JSPCN.net. All rights reserved.
JSP中文网    备案号:粤ICP备09171188号
成都恒海科技发展有限公司    成都市一环路南二段6号新瑞楼三楼8号