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


关键词

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

摘要

如何在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 = "/";
  }

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



 

文章的版权

洪哥写文章很苦逼,如果本文对您略有帮助,点击感兴趣的广告支持洪哥!万分感谢!本文属于“洪哥笔记”原创文章,转载请注明来源地址:如何在Web页上实现文件上传:http://www.splaybow.com/post/jspwebupload.html

关注与收藏

如果您在服务器运维、网络管理、网站或系统开发过程有需要提供收费服务,请加QQ:115085382!十年运维经验,帮您省钱、让您放心!
亲,如果有需要,先存起来,方便以后再看啊!加入收藏夹的话,按Ctrl+D


« 也谈一下JSP文件上传 JSP语法 »

相关文章:

JSP动态包含  (2014/6/28 8:32:24)

JSP静态包含  (2014/6/27 8:24:43)

Java参数化查询无法得到可更新的记录集  (2014/6/26 9:29:00)

jsp包含文件与被包含文件的contentType必须完全一致  (2014/6/25 9:19:33)

Java可以定义元素个数为0的数组  (2014/6/23 11:24:23)

Java中XML的构造与输出  (2014/3/29 11:51:08)

Java中如何把整形int转换成字符串String类型  (2014/3/28 11:31:28)

自动添加超链接  (2014/1/17 9:43:23)

使用keytool生成私钥  (2014/1/2 20:58:48)

Java递归算法示例  (2013/12/29 19:19:50)