1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
   | import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
 
import javax.activation.MimetypesFileTypeMap;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.apache.log4j.Logger;
 
 
/**
 * Action d'export au format csv et pdf.
 * 
 * @author xxxxxx
 */
public class EditionDocumentServlet extends HttpServlet
{
    /**
     * UID.
     */
    private static final long serialVersionUID = 0L;
 
    /** 
     * Logger pour traçage des log. 
     */
    private final Logger log = LogFactory.getLogger( EditionDocumentServlet.class );
 
    /**
     * Méthode d'execution.
     * 
     * @param request
     *            HttpServletRequest : la requête initiale
     * @param response
     *            HttpServletResponse : la réponse à la requête
     * @throws ServletException :
     *             en cas de problème d'accès base
     */
    public void doPost ( HttpServletRequest request, HttpServletResponse response )
        throws ServletException
    {
        log.debug( "Préparation à l'édition du document" ); 
        String repertoire = request.getParameter("repertoire");
        String nomFichier = request.getParameter("fichier");
 
        FileInputStream fichier = null;
        try
        {
        	File file = new File( repertoire, nomFichier );
	        fichier = new FileInputStream( file );
	        String contentType = null;
 
	        if (nomFichier.substring(nomFichier.length() - 4).equalsIgnoreCase(".pdf"))
	        {
	        	contentType = "application/pdf";
	        }
	        else
	        {
	        	contentType = MimetypesFileTypeMap.getDefaultFileTypeMap().getContentType( file );
	        }
	        log.info("Mime type : " + contentType);
	        response.setHeader("Pragma", "public");
	        response.setDateHeader("Expires", 0);
	        response.setStatus(HttpServletResponse.SC_OK);
	        response.setContentType(contentType);
	        response.setHeader( "Content-disposition", "inline; filename=\"" + nomFichier + "\"" );
 
	        DataOutputStream vDataOutputStream = new DataOutputStream( response.getOutputStream() );
        	byte[] flux = new byte[100000];
        	while (fichier.read(flux) != -1)
        	{
        		vDataOutputStream.write( flux );
        	}
            log.info( "Ecriture du rapport dans la reponse HTTP" );
            vDataOutputStream.close();
        }
        catch ( FileNotFoundException fne )
        {
        	log.error("Le fichier " + nomFichier + " n'existe pas ");
        	throw new ServletException( fne.getMessage(), fne );
        }
        catch ( IOException ioe )
        {
            log.error( "Erreur IO lors de la génération de l'édition", ioe );
            throw new ServletException( ioe.getMessage(), ioe );
        }
        catch ( Exception e )
        {
            log.error( "Erreur lors de l'écriture du flux", e );
            throw new ServletException( e.getMessage(), e );
        }
 
    }
} | 
Partager