package com.andreiolar.abms.server;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileUtils;
import com.andreiolar.abms.properties.PropertiesReader;
import com.cloudinary.Cloudinary;
import com.cloudinary.utils.ObjectUtils;
public class FileUploader extends HttpServlet {
private static final long serialVersionUID = -1012536984949263031L;
private static final String UPLOAD_DIRECTORY = System.getProperty("user.dir") + "/files/general";
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
if (!ServletFileUpload.isMultipartContent(req)) {
resp.sendError(HttpServletResponse.SC_BAD_REQUEST, "Not a multipart request");
return;
}
ServletFileUpload upload = new ServletFileUpload(); // from Commons
String type = req.getParameter("type");
String extension = req.getParameter("extension");
String filename = null;
if (type.equals("upkeep")) {
YearMonth currentMonth = YearMonth.now();
YearMonth previousMonth = currentMonth.minusMonths(1);
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM_yyyy");
filename = "Upkeep_" + previousMonth.format(dtf) + "." + extension;
} else if (type.equals("picture")) {
String username = req.getParameter("username");
filename = username + ".png";
}
try {
FileItemIterator iter = upload.getItemIterator(req);
PropertiesReader reader = new PropertiesReader();
if (iter.hasNext()) {
FileItemStream fileItem = iter.next();
InputStream in = fileItem.openStream();
// The destination of your uploaded files.
File targetFile = new File(UPLOAD_DIRECTORY + "/" + filename);
FileUtils.copyInputStreamToFile(in, targetFile);
Cloudinary cloudinary = new Cloudinary(ObjectUtils.asMap("cloud_name", reader.readProperty("cloudinary.properties", "cloud_name"),
"api_key", reader.readProperty("cloudinary.properties", "api_key"), "api_secret",
reader.readProperty("cloudinary.properties", "api_secret")));
cloudinary.uploader().upload(targetFile, ObjectUtils.asMap("use_filename", true, "unique_filename", false, "resource_type", "auto"));
}
} catch (Exception caught) {
throw new RuntimeException(caught);
}
}
}