Rising Sun

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  148 随笔 :: 0 文章 :: 22 评论 :: 0 Trackbacks
package MEDET.servlets;
import java.net.*;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SaveFileServlet extends HttpServlet
{
   FileWriter savefile;
   String filename = null;
   String value = null;
   /**
   * Handles a POST request
   */
   public void doPost(
         HttpServletRequest request,
         HttpServletResponse response)
      throws ServletException, IOException
   {
      PrintWriter out = response.getWriter();
      response.setContentType("text/html");
      //FileWriter savefile;
      try {

         // Verify the content type

         String ct = request.getContentType();
         if (!ct.startsWith("multipart/form-data"))
            throw new RuntimeException
            ("Invalid content type");

         // Get the boundary string

         int p = ct.indexOf("boundary=");
         if (p == -1)
            throw new RuntimeException
            ("No boundary string found");

         p += "boundary=".length();
         String boundary = "--" + ct.substring(p);
         String finalBoundary = boundary + "--";

         // We'll parse the multipart/form-data
         // with a finite state machine

         // Define names for the parser states

         final int INIT = 0;
         final int READING_HEADERS = 1;
         final int READING_DATA = 2;

         int state = INIT;

         // Read and extract the fields

         BufferedReader in = request.getReader();
         main: for (;;) {
            String line = in.readLine();
            if (line == null)
               break;

            switch (state) {

               // State 0: Ignoring everything before
               // the first boundary

               case INIT:
                  if (line.startsWith(finalBoundary))
                     break main;
                  if (line.startsWith(boundary)) {
                     state = READING_HEADERS;
                     filename = "";
                     value = "";
                  }
                  break;

               // State 1: Parsing the headers

               case READING_HEADERS:
                  if (line.length() == 0)
                     state = READING_DATA;
                  else {

                     // Get the field name

                     p = line.indexOf("filename=\"");
                     if (p == -1)
                        break;
                     p += "filename=\"".length();

                     // ... up to the closing quote.

                     int q = line.indexOf("\"", p);
                     if (q == -1)
                        break;
                     filename = line.substring(p, q);
                     filename="./config/medet/applications/DefaultWebApp/"+filename.substring(filename.lastIndexOf("\\")+1);
                     savefile=new FileWriter(filename);
                     value = "";
                  }
                  break;

               // State 2: Reading the data

               case READING_DATA:
                  if (line.startsWith(finalBoundary)) {
                     savefile.write(value);
                     savefile.close();
                     break main;
                  }
                  if (line.startsWith(boundary)) {
                     state = READING_HEADERS;
                  }
                  else {
                     if (value.length() > 0)
                        value += "\n";
                     value += line;
                  }
                  break;
            }

         }
         // Report the incident number back to the client
         String[] text = {
            "<HTML>",
            "<HEAD>",
            "<meta http-equiv='Content-Type' content='text/html; charset=gb2312'>",
            "<TITLE>文件上传成功</TITLE>",
            "</HEAD>",
            "<BODY>",
            "<CENTER>",
            "<H3>文件上传成功!</H3>",
            "</CENTER>"
         };
         for (int i = 0; i < text.length; i++)
            out.println(text[i]);
            out.println(filename);
            out.println("</BODY>");
            out.println("</HTML>");
      }

      catch (Exception e) {
         // Write the exception message
         out.println("<H3>Error:</H3>");
         out.println("<PRE>");
         out.println(e.getMessage());
         out.println("</PRE>");
      }
      finally {
         out.flush();
      }
   }
}
posted on 2006-07-13 15:01 brock 阅读(902) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: