package com.sap.pto.util; import java.util.Arrays; import java.util.HashSet; import java.util.Iterator; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.swing.ImageIcon; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; /** * The class is used for validating and managing file uploads. */ public class UploadHandler { public final static int DEFAULT_MAX_SIZE = 100 * 1000 * 1024; //image related private static final String HEADER_OF_BMP_FILE = "424d"; private static final String HEADER_OF_JPEG_FILE = "ffffffffffffffd8ffffffffffffffe0"; private static final String HEADER_OF_GIF_FILE = "47494638"; private static final String HEADER_OF_PNG_FILE = "ffffff89504e47"; private static HashSet<String> ALLOWED_IMAGE_HEADERS = new HashSet<String>(Arrays.asList(HEADER_OF_JPEG_FILE, HEADER_OF_GIF_FILE, HEADER_OF_PNG_FILE)); public static FileItem getUploadedDocument(HttpServletRequest request) throws FileUploadException { FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List<FileItem> items = upload.parseRequest(request); Iterator<FileItem> iterator = items.iterator(); FileItem document = (FileItem) iterator.next(); return document; } public static boolean isImage(byte[] documentContent) { boolean result = false; int neededHeaderBytes = 4; StringBuilder header = new StringBuilder(); for (int i = 0; i < neededHeaderBytes; i++) { header.append(Integer.toHexString(documentContent[i])); } if (ALLOWED_IMAGE_HEADERS.contains(header.toString()) || header.toString().startsWith(HEADER_OF_BMP_FILE)) { result = true; } return result; } public static boolean isImageSizeValid(byte[] documentContent, int maxWidth, int maxHeight) { boolean result = false; ImageIcon icon = new ImageIcon(documentContent); int width = icon.getIconWidth(); int height = icon.getIconHeight(); if (width <= maxWidth && height <= maxHeight) { result = true; } return result; } }