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