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

    技术2022-05-11  100

    <script> if (document.all!=null){ if (typeof(parent.parent.BoardTitle)!='undefined') if (typeof(parent.parent.BoardTitle.setCount)!="undefined") parent.parent.BoardTitle.setCount(179)} function ExpandMe(){ if (typeof(parent.frmMain)!="undefined") { parent.frmMain.rows="45,*" } } // document.onclick = ExpandMe // ExpandMe() </script>   <script language=JavaScript src="http://www.51banner.com/SSbanner.asp?userid=22&sizeId=9"></script> <script> document.write(" "); document.write(""); document.write(""); </script>  

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

     

    最新回复(0)