Archivia il PDF per un periodo limitato sul server delle app e rendilo disponibile per il download

Hei lì, sto usando PrimeFaces 5 / JSF 2 e Tomcat!

Qualcuno può mostrarmi o darmi un’idea su come conservare i pdf per un tempo limitato su un server di applicazioni (sto usando tomcat) e poi scaricarlo (se è ciò che l’utente richiede). Questa funzionalità si riferisce alle fatture, quindi non posso usare il dataExporter.

Per essere più specifico, ho praticamente implementato questo, ma non ne sono così sicuro. Una grande domanda è … dove posso archiviare i miei file generati? Ho dato un’occhiata e la gente ha detto che non è giusto salvare i file nella webapp o nella directory tomcat. Che altro soluto ho?

Utilizzare la funzione File#createTempFile() . La cartella temporanea gestita da servlettaintainer è disponibile come attributo ambito applicazione con ServletContext.TEMPDIR come chiave.

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

Quindi basta passare il nome del file generato automaticamente a quello responsabile per servirlo. Per esempio

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

Infine, una volta che il responsabile del servizio viene chiamato con il nome del file come parametro, ad esempio un servlet semplice , quindi basta eseguire lo streaming come segue:

 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()); 

Guarda anche:

  • Come salvare temporaneamente il file generato nell’applicazione web basata su servlet
  • Modo consigliato per salvare i file caricati in un’applicazione servlet

La tua domanda è vaga, ma se la mia comprensione è buona:

Innanzitutto, se si desidera archiviare il PDF per un periodo di tempo limitato, è ansible creare un lavoro che pulisca i PDF ogni giorno o settimana o qualsiasi altra cosa sia necessaria.

Per il lato download, è ansible utilizzare ( http://www.primefaces.org/showcase/ui/file/download.xhtml ) per scaricare qualsiasi file dal server delle applicazioni.