如何实现文件上传

yuri 2002-02-20 08:14:23
加精
如何在Web页上实现文件上传
...全文
61 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
mfc42d 2002-02-20
//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) {}
  }
 }
}
回复
mfc42d 2002-02-20
give you a example split two parts
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);
回复
发动态
发帖子
Web 开发
创建于2007-09-28

7.9w+

社区成员

Java Web 开发
申请成为版主
社区公告
暂无公告