| 
 
 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) {}     }   } }
 
 
  
 
  
 
  |