co.com.rempe.impresiones.negocio.servlets.SubirArchivosServlet.java Source code

Java tutorial

Introduction

Here is the source code for co.com.rempe.impresiones.negocio.servlets.SubirArchivosServlet.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 co.com.rempe.impresiones.negocio.servlets;

import co.com.rempe.impresiones.negocio.constantes.EDireccion;
import co.com.rempe.impresiones.negocio.respuesta.Respuesta;
import co.com.rempe.impresiones.persistencia.entidades.ArchivosAdjuntos;
import com.google.gson.Gson;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 *
 * @author jhonjaider1000
 */
@WebServlet(name = "SubirArchivosServlet", urlPatterns = { "/subirArchivosServlet", "/eliminarArchivo" })
public class SubirArchivosServlet extends HttpServlet {

    @Override
    public void init() throws ServletException {
        super.init();
    }

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        Respuesta respuesta = new Respuesta();
        try {
            String url = request.getServletPath();
            EDireccion direccion = EDireccion.getDireccion(url);
            switch (direccion) {
            case SUBIR_ARCHIVO:
                respuesta = subirArchivo(request);
                break;
            case ELIMINAR_ARCHIVO:
                respuesta = eliminarArchivo(request);
                break;
            }
        } catch (Throwable e) {
            e.printStackTrace();
        } finally {
            String json = new Gson().toJson(respuesta);
            out.print(json);
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    private Respuesta subirArchivo(HttpServletRequest request) throws FileUploadException, Exception {
        Respuesta respuesta = new Respuesta();
        FileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);

        // req es la HttpServletRequest que recibimos del formulario.
        // Los items obtenidos sern cada uno de los campos del formulario,
        // tanto campos normales como ficheros subidos.
        //        System.out.println("Items-------");
        List items = upload.parseRequest(request);
        System.out.println(items);

        //        System.out.println("Request-----------------");
        System.out.println(request);
        // Se recorren todos los items, que son de tipo FileItem
        for (Object item : items) {
            FileItem uploaded = (FileItem) item;
            // Hay que comprobar si es un campo de formulario. Si no lo es, se guarda el fichero
            // subido donde nos interese
            //            System.out.println("Item---------------");
            System.out.println(uploaded.isFormField());
            if (!uploaded.isFormField()) {
                // No es campo de formulario, guardamos el fichero en algn sitio

                //El sisguiente bloque simplemente es para divorciar el nombre del archivo de las rutas
                //posibles que pueda traernos el getName() sobre el objeto de  la clase FileItem,
                //pues he descuvierto que el explorer especificamente es el nico que enva
                //la ruta adjuntada al nombre, por lo cual es importante corregirlo.
                String nombreArchivo = uploaded.getName();
                String cadena = nombreArchivo;
                System.out.println(cadena);
                while (cadena.contains("\\")) {
                    cadena = cadena.replace("\\", "&");
                }
                //                System.out.println(cadena);
                String[] ruta = cadena.split("&");
                for (int i = 0; i < ruta.length; i++) {
                    String string = ruta[i];
                    System.out.println(string);
                }
                nombreArchivo = ruta[ruta.length - 1];
                //                System.out.println("Ruta archivo: " + nombreArchivo);
                //Fin correccin nombre.

                String nombreArchivoEscrito = System.currentTimeMillis() + "-" + nombreArchivo;
                String rutaEscritura = new File(request.getRealPath("archivos-subidos"), nombreArchivoEscrito)
                        .toString();
                File fichero = new File(rutaEscritura);

                ArchivosAdjuntos archivo = new ArchivosAdjuntos();
                archivo.setNombreArchivo(nombreArchivo);
                archivo.setRutaArchivo(rutaEscritura);
                archivo.setTamanioArchivo(uploaded.getSize());
                if (nombreArchivo.endsWith(".pdf") || nombreArchivo.endsWith(".png")
                        || nombreArchivo.endsWith(".jpg") || nombreArchivo.endsWith(".bmp")
                        || nombreArchivo.endsWith(".svg")) {
                    //                    System.out.println("Archivo subido: " + uploaded.getName());
                    uploaded.write(fichero);
                    respuesta.setCodigo(1);
                    respuesta.setDatos(archivo);
                    respuesta.setMensaje("Se ha subido exitosamente el archivo: " + uploaded.getName());
                } else {
                    respuesta.setCodigo(0);
                    respuesta.setDatos(archivo);
                    respuesta.setMensaje("El formato del archivo " + nombreArchivo + " es invalido!");
                }
            }
            //            else {
            //                // es un campo de formulario, podemos obtener clave y valor
            //                String key = uploaded.getFieldName();
            //                String valor = uploaded.getString();
            //                System.out.println("Archivo subido: " + key);
            //            }
        }
        return respuesta;
    }

    private Respuesta eliminarArchivo(HttpServletRequest request) {
        Respuesta respuesta = new Respuesta();
        try {
            File archivo = new File(request.getParameter("rutaArchivo"));
            if (archivo.delete()) {
                respuesta.setCodigo(1);
                respuesta.setMensaje("Se ha eliminado el archivo!.");
            } else {
                respuesta.setCodigo(0);
                respuesta.setMensaje("No se pudo eliminar el archivo.");
            }
        } catch (Exception e) {
            respuesta.setCodigo(-1);
            respuesta.setMensaje("Error al eliminar el archivo!.");
        }
        return respuesta;
    }
}