Almacene PDF por tiempo limitado en el servidor de la aplicación y déjelo disponible para su descarga

¡Hei allí, estoy usando PrimeFaces 5 / JSF 2 y tomcat!

¿Puede alguien mostrarme o darme una idea sobre cómo almacenar archivos PDF durante un tiempo limitado en un servidor de aplicaciones (estoy usando Tomcat) y luego descargarlo (si eso es lo que solicita el usuario). Esta funcionalidad se relaciona con las facturas, por lo que no puedo usar dataExporter.

Para ser más específico, prácticamente lo implementé, pero no estoy tan seguro de eso. Una gran pregunta es … ¿dónde almaceno mis archivos generados? He navegado y la gente dijo que no está bien guardar los archivos en la aplicación web o en el directorio de tomcat. ¿Qué otra solución tengo?

Haga uso de la función File#createTempFile() . La carpeta temporal administrada por servletcontainer está disponible como atributo de ámbito de aplicación con ServletContext.TEMPDIR como clave.

 String tempDir = (String) externalContext.getApplicationMap().get(ServletContext.TEMPDIR); File tempPdfFile = File.createTempFile("generated-", ".pdf", tempDir); // Write to it. 

Luego solo pase el nombre del archivo autogenerado al encargado de servirlo. P.ej

 String tempPdfFileName = tempPdfFile.getName(); // ... 

Finalmente, una vez que el responsable de servirlo se llama con el nombre del archivo como parámetro, por ejemplo, un servlet simple , simplemente transmítalo de la siguiente manera:

 String tempDir = (String) getServletContext().getAttribute(ServletContext.TEMPDIR); File tempPdfFile = new File(tempDir, tempPdfFileName); response.setHeader("Content-Type", "application/pdf"); response.setHeader("Content-Length", String.valueOf(tempPdfFile.length())); response.setHeader("Content-Disposition", "inline; filename=\"generated.pdf\""); Files.copy(tempPdfFile.toPath(), response.getOutputStream()); 

Ver también:

  • Cómo guardar el archivo generado temporalmente en una aplicación web basada en servlet
  • Forma recomendada para guardar archivos cargados en una aplicación servlet

Su pregunta es vaga, pero si mi entendimiento es bueno:

Primero, si desea almacenar el PDF por tiempo limitado, puede crear un trabajo que lo limpie todos los días o a la semana, o lo que necesite.

Para descargar, puede usar ( http://www.primefaces.org/showcase/ui/file/download.xhtml ) para descargar cualquier archivo del servidor de aplicaciones.