projectServlet.UploadServlet.java Source code

Java tutorial

Introduction

Here is the source code for projectServlet.UploadServlet.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package projectServlet;

import java.io.File;
import java.io.IOException;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import java.util.Map;
import java.util.HashMap;
import java.util.ArrayList;
import javax.servlet.RequestDispatcher;

import project.ImageDO;

/**
 * Servlet implementation class UploadServlet
 */
public class UploadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    private static final String DATA_DIRECTORY = "Files";
    private static final int MAX_MEMORY_SIZE = 1024 * 1024 * 20;
    private static final int MAX_REQUEST_SIZE = 1024 * 1024 * 20;

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

        // Check that we have a file upload request
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);

        if (!isMultipart) {
            return;
        }

        // Create a factory for disk-based file items
        DiskFileItemFactory factory = new DiskFileItemFactory();

        // Sets the size threshold beyond which files are written directly to
        // disk.
        factory.setSizeThreshold(MAX_MEMORY_SIZE);

        // Sets the directory used to temporarily store files that are larger
        // than the configured size threshold. We use temporary directory for
        // java
        factory.setRepository(new File(System.getProperty("java.io.tmpdir")));

        // constructs the folder where uploaded file will be stored
        String uploadFolder = getServletContext().getRealPath("") + File.separator + DATA_DIRECTORY;

        // Create a new file upload handler
        ServletFileUpload upload = new ServletFileUpload(factory);

        // Set overall request size constraint
        upload.setSizeMax(MAX_REQUEST_SIZE);

        try {
            Map<String, String> map = new HashMap<String, String>();
            ArrayList<String> imgs_str = new ArrayList<String>();
            boolean result = false;
            float price = 0;

            ArrayList<ImageDO> imagesDO = new ArrayList<ImageDO>();
            // Parse the request
            List items = upload.parseRequest(request);
            Iterator iter = items.iterator();
            String field_name;
            while (iter.hasNext()) {
                FileItem item = (FileItem) iter.next();
                field_name = item.getFieldName();
                if (!item.isFormField()) {
                    String fileName = new File(item.getName()).getName();

                    String fullFileName = field_name + "_" + System.currentTimeMillis() + "_" + fileName;

                    String filePath = uploadFolder + File.separator + fullFileName;
                    File uploadedFile = new File(filePath);

                    System.out.print("filePath loop: " + filePath);
                    if (field_name.equals("projectFile")) {
                        if (fileName == "" || fileName.isEmpty()) {
                            //RequestDispatcher rd = getServletContext().getRequestDispatcher("/PaginaDoDesenvolvedor/uploadprojeto.jsp");
                            PrintWriter out3 = response.getWriter();

                            //rd.include(request, response);

                            response.sendRedirect("./PaginaDoDesenvolvedor/uploadprojeto.jsp?error=nofile");
                            //out3.println("<font color=red>Favor escolher um arquivo.</font>");
                            return;
                        }
                        map.put(field_name, fullFileName);
                        System.out.print("projectFile: " + fullFileName);
                        // saves the file to upload directory
                        item.write(uploadedFile);
                    } else if (field_name.equals("image") && (fileName != "" && !fileName.isEmpty())) {
                        ImageDO image = new ImageDO();
                        image.setImagelink(fullFileName);
                        imagesDO.add(image);
                        // saves the file to upload directory
                        item.write(uploadedFile);
                    }
                } else {
                    System.out.print("var " + item.getFieldName() + ": " + item.getString());
                    map.put(item.getFieldName(), item.getString());
                }
            }

            try {
                String price_str = map.get("price");
                if (!utils.MetodosUteis.isEmpty(price_str)) {
                    price = Float.valueOf(price_str).floatValue();
                }
                project.projectDO project = new project.projectDO(map.get("name"), map.get("description"),
                        map.get("comments"), price, 0);
                project.versionDO version = new project.versionDO();
                version.setFilepath(map.get("projectFile"));
                System.out.print("filename:" + map.get("projectFile"));
                transaction.UploadProject upProject = new transaction.UploadProject();
                try {
                    result = upProject.uploadProject(project, version, imagesDO);
                } catch (Exception e) {
                    System.out.print("ERROR! Upload");
                    response.sendRedirect("./PaginaDoDesenvolvedor/uploadprojeto.jsp?error=erroruploading");
                    //RequestDispatcher rd = getServletContext().getRequestDispatcher("/done.jsp");
                    //PrintWriter out = response.getWriter();
                    //out.println("<font color=red>Erro ao subir pr0ojeto.</font>");
                    //rd.include(request, response);

                    return;
                }
            } catch (NumberFormatException e) {
                System.out.print("ERROR! Number Format");
            }

            // displays done.jsp page after upload finished

            PrintWriter out2 = response.getWriter();
            RequestDispatcher rd;
            if (result) {
                response.sendRedirect("./done.jsp");
                out2.println(
                        "<h3>Seu arquivo projeto foi enviado com sucesso para aprovao dos moderadores!</h3>");
            } else {
                //rd = getServletContext().getRequestDispatcher("/PaginaDoDesenvolvedor/uploadprojeto.jsp");
                //out2.println("<font color=red>Favor preencher os campos corretamente.</font>");
                response.sendRedirect("./PaginaDoDesenvolvedor/uploadprojeto.jsp?error=wrongfields");
            }
            //rd.include(request, response);

        } catch (FileUploadException ex) {
            throw new ServletException(ex);
        } catch (Exception ex) {
            throw new ServletException(ex);
        }

    }

}