In this tutorial you will learn about uploading many files at once using servlet
Servlet File Upload
To upload file in servlet, following are some steps
- Create FileItemFactory instance
FileItemFactory fileItemFactory = new DiskFileItemFactory();
- By using fileItemFactory instace get the ServletFileUpload object as
ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
- Now get the list of all files by parsing the request
List
fileItems = servletFileUpload.parseRequest(request); - Create the InputStream and OutputStream instance by using the fileItems as
OutputStream outputStream = new FileOutputStream(fileItem.getName()); InputStream inputStream = fileItem.getInputStream();
- Innitiate a byte array and read bytes from input stream and write it to the output stream
int readBytes = 0; byte[] buffer = new byte[10000]; while ((readBytes = inputStream.read(buffer, 0, 10000)) != -1) { outputStream.write(buffer, 0, readBytes); }
The complete servlet code is given below
MyServlet.java
package devmanuals.servlet; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class MyServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); FileItemFactory fileItemFactory = new DiskFileItemFactory(); ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory); try { ListfileItems = servletFileUpload.parseRequest(request); Iterator iterator = fileItems.iterator(); while (iterator.hasNext()) { FileItem fileItem = iterator.next(); boolean formFied = fileItem.isFormField(); if (formFied) { out.println(" regular form field" + fileItem.getFieldName()); } else { String fileName = request.getRealPath("") + "/images/"+ fileItem.getName(); OutputStream outputStream = new FileOutputStream(fileName); InputStream inputStream = fileItem.getInputStream(); int readBytes = 0; byte[] buffer = new byte[10000]; while ((readBytes = inputStream.read(buffer, 0, 10000)) != -1) { outputStream.write(buffer, 0, readBytes); } outputStream.close(); inputStream.close(); if(fileItem.getName()!= null){ out.println("<td><img width='100' heigth='100' src="+ request.getContextPath() + "/images/"+ fileItem.getName() + "></td>"); } } } } catch (Exception e) { e.printStackTrace(); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } } Following is the file upload form
<html> <head> <title>My form</title> <script type="text/javascript"> var displayDiv = false; function viewFileUpload() { var divElement = document.getElementById("imageblock"); var plus = document.getElementById("plus"); var minus = document.getElementById("minus"); if (displayDiv) { divElement.style.display = "block"; plus.style.display = "none"; minus.style.display = "block"; displayDiv = false; } else { divElement.style.display = "none"; plus.style.display = "block"; minus.style.display = "none"; displayDiv = true; } } function makeInvisibleDiv() { var divElement = document.getElementById("imageblock"); var imageElement = document.getElementById("minus"); divElement.style.display = "none"; imageElement.style.display = "none"; displayDiv = true; } </script> </head> <body onLoad="makeInvisibleDiv()"> <center> <form action="myservlet.html" method="post" enctype="multipart/form-data"> <table> <tr> <td><input type="file" name="image" id="image" /></td> <td><img src="./img/plus.png" id="plus" width="30" height="30" onclick= "viewFileUpload();"> <img src="./img/minus.png" id="minus" width="25" height="25" onclick="viewFileUpload();"> </td> </tr> </table> <div id="imageblock"> <input type="file" name="image1" id="image1" /><br /> <input type="file" name="image2" id="image2" /><br /> <input type="file" name="image3" id="image3" /><br /> <input type="file" name="image4" id="image4" /> </div> <input type="submit" value="Add" /></form> </center> </body> </html>
When you run this application it will display message as shown below:
Your Comment:
[ 0 ] Comments