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();
????? }
?? }
}