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);
//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 ers 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 er (ing 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) {} } } }
下
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);
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 ers 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 er
(ing 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) {}
}
}
}