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

    技术2022-05-11  60

    如何在Web页上实现文件上传  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 didnt select a directory higher in            the directory tree*/          if (directory.indexOf(..) > 0)          {            out.println(Security Error: You cant 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 doesnt 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) {}    }  }}   

    最新回复(0)