Servlet 3.0 @MultiPartConfig
JSP page:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Upload File</title>
</head>
<body>
<form action="uploadTest" method="post" enctype="multipart/form-data">
<table>
<tr>
<td>Select File : </td>
<td><input name="fileToUpload" type="file"/> </td>
</tr>
</table>
<p/>
<input type="submit" value="Upload File"/>
</form>
</body>
</html>
Actual Servlet:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns="/uploadTest")
@MultipartConfig
public class MySecondServlet extends HttpServlet {
private static final long serialVersionUID = 11234354643L;
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response){
try {
String fileName = MySecondServlet.getFileName(request.getPart("fileToUpload").getHeader("content-disposition"));
String outPutFile = this.getServletContext().getRealPath(fileName);
FileOutputStream os = new FileOutputStream(outPutFile);
InputStream is = request.getPart("fileToUpload").getInputStream();
int ch = is.read();
while(ch != -1){
os.write(ch);
ch = is.read();
}
os.close();
response.getWriter().append("Uploaded!");
} catch (IOException e) {
e.printStackTrace();
} catch (ServletException e) {
e.printStackTrace();
}
}
private static String getFileName(String neededHeader){
String fileName = null;
for(String onePiece : neededHeader.split(";") ){
if(onePiece.contains("filename=")){
String myPieces[] = onePiece.split("=");
fileName = myPieces[1].replaceAll("\"", "").trim();
}
}
// If we reach this if, then either the Header is deformated or it does not have the needed format
if(null == fileName) throw new IllegalArgumentException("The Header provided seems to be Invalid!");
return fileName;
}
}