Image file upload Java Servlet Example


import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.security.SecureRandom;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import com.google.gson.JsonObject;

public class ImageUpload extends HttpServlet {

 private static final long serialVersionUID = 1L;
 private Logger logger = null;
 
 private File tmpDir;
 private static final String DESTINATION_DIR_PATH ="/images/new";
 private static final String TEMP_DIR_PATH ="/images/temp";
 private File destinationDir;

 public ImageUpload() {
  super();
  logger = LogManager.getLogger(ImageUpload.class);
 }

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  //do nothing here ...
 }

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  tmpDir = new File(TEMP_DIR_PATH);
  if(!tmpDir.isDirectory()) {
   throw new ServletException(TEMP_DIR_PATH + " is not a directory");
  }
  
  destinationDir = new File(DESTINATION_DIR_PATH);
  if(!destinationDir.isDirectory()) {
   destinationDir.mkdirs();
  }
  
  //PrintWriter to send the JSON response back
  PrintWriter out = response.getWriter();
  
  //set content type and header attributes
  response.setContentType("text/html");
  response.setHeader("Cache-control", "no-cache, no-store");
  response.setHeader("Pragma", "no-cache");
  response.setHeader("Expires", "-1");
  response.setHeader("Access-Control-Allow-Origin", "*");
  response.setHeader("Access-Control-Allow-Methods", "POST");
  response.setHeader("Access-Control-Allow-Headers", "Content-Type");
  response.setHeader("Access-Control-Max-Age", "86400");

  DiskFileItemFactory  fileItemFactory = new DiskFileItemFactory ();

  //Set the size threshold, above which content will be stored on disk.
  fileItemFactory.setSizeThreshold(1*1024*1024); //1 MB

  //Set the temporary directory to store the uploaded files of size above threshold.
  fileItemFactory.setRepository(tmpDir);

  ServletFileUpload uploadHandler = new ServletFileUpload(fileItemFactory);
  JsonObject myObj = new JsonObject();

  File file = null;
  String filename = null;

  try {

   //Parse the request
   List items = uploadHandler.parseRequest(request);
   Iterator iterator = items.iterator();
   while(iterator.hasNext()) {
    FileItem item = (FileItem) iterator.next();

    //Handle Form Fields
    if(item.isFormField()) {
     if(item.getFieldName().trim().equalsIgnoreCase("pictureDirectory")){
      String pictureDirectory = item.getString().trim();
      if(pictureDirectory.trim().equals("")){
       pictureDirectory = DESTINATION_DIR_PATH;
       destinationDir = new File(DESTINATION_DIR_PATH);
       if(!destinationDir.isDirectory()) {
        destinationDir.mkdirs();
       }
      }
     }
     logger.debug("File Name = "+item.getFieldName()+", Value = "+item.getString());
    } 

    //Handle Uploaded files.
    else {
     logger.debug("Field Name = " + item.getFieldName()+
       ", File Name = " + item.getName()+
       ", Content type = " + item.getContentType()+
       ", File Size = " + item.getSize());
     
     //Write file to the ultimate location.
     filename = item.getName().trim();
     file = new File(destinationDir, filename);
     item.write(file);
     
     //Write the file with a new name
     filename =  getRandomString() + "." +
        FilenameUtils.getExtension(filename);
     file = new File(destinationDir, filename);
     item.write(file);
    }



   }

   myObj.addProperty("success", true);
   myObj.addProperty("picturePath", file.getAbsolutePath());
   myObj.addProperty("pictureName", filename);
   logger.debug("End...");
   
  }

  catch(FileUploadException ex) {
   ex.printStackTrace();
   myObj.addProperty("success", false);
  } 

  catch(Exception ex) {
   ex.printStackTrace();
   myObj.addProperty("success", false);
   out.println(myObj.toString());
  }

  out.println(myObj.toString());
  out.close();

 }

 private String getRandomString() {

  SecureRandom random = new SecureRandom();
  String randomString = new BigInteger(130, random).toString(32);
  return(randomString);
 }

}

No comments:

Post a Comment

NO JUNK, Please try to keep this clean and related to the topic at hand.
Comments are for users to ask questions, collaborate or improve on existing.