You are on page 1of 4

package com.jcg.

servlet;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.imageio.ImageIO;
import javax.servlet.RequestDispatcher;
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;
import javax.servlet.http.Part;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;

import com.icafe4j.image.ImageColorType;
import com.icafe4j.image.ImageParam;
import com.icafe4j.image.ImageParam.ImageParamBuilder;
import com.icafe4j.image.options.TIFFOptions;
import com.icafe4j.image.tiff.TIFFTweaker;
import com.icafe4j.image.tiff.TiffFieldEnum.Compression;
import com.icafe4j.io.FileCacheRandomAccessOutputStream;
import com.icafe4j.io.RandomAccessOutputStream;

@WebServlet(description = "Upload File To The Server", urlPatterns = {


"/fileUploadServlet" })
@MultipartConfig(fileSizeThreshold = 1024 * 1024 * 10, maxFileSize = 1024 * 1024 *
30, maxRequestSize = 1024 * 1024 * 50)
public class FileUploadServlet extends HttpServlet {

private static final long serialVersionUID = 1L;


public static final String UPLOAD_DIR = "uploadedFiles";

/***** This Method Is Called By The Servlet Container To Process A 'POST'


Request *****/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
handleRequest(request, response);
}

public void handleRequest(HttpServletRequest request, HttpServletResponse


response) throws ServletException, IOException {

/***** Get The Absolute Path Of The Web Application *****/


String uploadPath = "E:\\CODE_PRACTICE_WORKSPACE\\JAVA_CODE_PRACTICE\\
Libraries\\Uploaded";

File fileUploadDirectory = new File(uploadPath);


if (!fileUploadDirectory.exists()) {
fileUploadDirectory.mkdirs();
}

String fileName = "";


UploadDetail details = null;
List<UploadDetail> fileList = new ArrayList<>();
String checkBoxValue = request.getParameter("checkBoxName");
String freeText = request.getParameter("freeText");
String date = getDate();
for (Part part : request.getParts()) {
if (!part.getName().equalsIgnoreCase("freeText") && !
part.getName().equalsIgnoreCase("checkBoxName")) {
fileName = extractFileName(part);
details = new UploadDetail();
details.setCheckBox(checkBoxValue);
details.setDateOfSubmission(date);
details.setFileName(fileName);
details.setTypeOfService(freeText);
details.setFileSize(part.getSize() / 1024);
long size = 1000000l;
long fileSize = part.getSize();
if(fileSize < size) {
try {
part.write(uploadPath + File.separator +
fileName);
details.setUploadStatus("Success");

File f = new File(uploadPath + File.separator +


fileName);
PDDocument pdf = getPdfDoc(f);
savePdfAsTiff(pdf, uploadPath);
} catch (IOException ioObj) {
details.setUploadStatus("Failure : " +
ioObj.getMessage());
}

}
else {
details.setUploadStatus("Uploaded file size cannot
exceed 1MB");
}
fileList.add(details);
}
}

if(details != null && !


details.getUploadStatus().equalsIgnoreCase("Success")) {
request.setAttribute("utilOutput", details.getUploadStatus());
RequestDispatcher dispatcher =
request.getRequestDispatcher("/fileupload.jsp");
dispatcher.forward(request, response);
}
else {
request.setAttribute(UPLOAD_DIR, fileList);
RequestDispatcher dispatcher =
request.getRequestDispatcher("/fileuploadResponse.jsp");

dispatcher.forward(request, response);
}
}

/***** Helper Method #1 - This Method Is Used To Read The File Names *****/
private String extractFileName(Part part) {
String fileName = "";
String contentDisposition = part.getHeader("content-disposition");
String[] items = contentDisposition.split(";");
for (String item : items) {
if (item.trim().startsWith("filename")) {
String filePath = item.substring(item.indexOf('=') + 2,
item.length() - 1);
String[] filePathArray = filePath.split(File.separator +
File.separator);
for (String path : filePathArray) {
if (path.endsWith(".jpg") || path.endsWith(".jpeg")
|| path.endsWith(".png") || path.endsWith(".pdf") || path.endsWith(".tiff")) {
fileName = path;
break;
}
}

}
}
return fileName;
}

private String getDate() {


String pattern = "dd/MM/yyyy hh:mm:ss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
return simpleDateFormat.format(new Date());
}

private String imageToPDF(String uploadPath, String fileName) throws


IOException {
String path = uploadPath + File.separator + fileName;
BufferedImage image = ImageIO.read(new File(path));//Or image.jpg or
image.tiff, etc.
String[] formatNames = ImageIO.getWriterFormatNames();
//A robust use would validate whatever format you're intending to use
against
//the canonical list of format names retrieved by that call
String[] opArray = fileName.split("\\.");
String output = uploadPath + File.separator + opArray[0] + ".tiff";
ImageIO.write(image, "tiff", new File(output));

return opArray[0] + ".tiff";

private PDDocument getPdfDoc(File filePath) throws IOException {


return PDDocument.load(filePath);
}

private void savePdfAsTiff(PDDocument pdf, String uploadPath) throws


IOException {
BufferedImage[] images = new BufferedImage[pdf.getNumberOfPages()];
for(int i=0; i<images.length; i++) {
PDPage page = (PDPage)
pdf.getDocumentCatalog().getPages().get(i);
BufferedImage image;
FileOutputStream fos = null;
RandomAccessOutputStream r = null;
try {
image = ImageIO.read(page.getContents());
images[i] = image;
fos = new FileOutputStream(uploadPath.concat("\\
image.tiff"));
r = new FileCacheRandomAccessOutputStream(fos);
ImageParamBuilder b = ImageParam.getBuilder();
ImageParam[] param = new ImageParam[1];
TIFFOptions tiff = new TIFFOptions();
tiff.setTiffCompression(Compression.CCITTFAX4);
b.imageOptions(tiff);
b.colorType(ImageColorType.BILEVEL);
param[0] = b.build();
TIFFTweaker.writeMultipageTIFF(r, images, param);
}catch(IOException e) {
e.printStackTrace();
}
finally {
if(r != null) r.close();

if(fos != null) fos.close();

}
}

You might also like