Pregunta

Necesito algunas ideas sobre cómo puedo resolver mejor este problema.

Tengo una aplicación JBoss Seam que se ejecuta en JBoss 4.3.3 Lo que hace una pequeña porción de esta aplicación es generar un HTML y un documento PDF basado en una plantilla de oficina abierta.

Los archivos que se generan los coloco dentro de /tmp/ en el sistema de archivos.He intentado con System.getProperties ("TMP.Dir") y algunas otras opciones, y siempre devuelven $ jboss_home/bin me gustaría elegir la ruta $ jboss_home/$ implement/myear.ear/mywar.war/wylylocationhere/

Sin embargo, no sé cómo puedo elegir la ruta mediante programación sin dar una ruta absoluta o configurar $JBOSS_HOME y $DEPLOY.

Anybody know how I can do this?

La segunda pregunta;Quiero obtener una vista previa fácilmente de estos archivos generados.Ya sea a través de JavaScript, o como sea la forma más sencilla.Sin embargo, JavaScript no puede acceder al sistema de archivos del servidor, por lo que no puedo abrir el archivo a través de JavaScript.

Any easy solutions out there?
¿Fue útil?

Solución

No estoy seguro de cómo está generando sus archivos PDF, pero si es posible, omita la E/S del disco por completo, guarde el contenido del PDF en un byte[] y enviárselo al usuario en un servlet configurando el tipo mime en application/pdf* que responde a una URL especificada por un enlace en su cliente o configurada dinámicamente en un <div> por javascript.Probablemente estés recibiendo un golpe de memoria de todos modos y, además de omitir el IO, no tienes que preocuparte por eliminar los archivos tmp cuando hayas terminado con la vista previa.

*****Creo que esto es correcto.Necesito buscarlo.

Otros consejos

No estoy seguro de tener una comprensión completa de lo que está tratando de lograr, pero lo intentaré de todos modos:

Supongo que su objetivo final es hacer que algunos archivos (PDF, HTML) estén disponibles para los usuarios finales a través de una aplicación web.

En ese caso, ¿por qué no hacer que Apache sirva esos archivos a los usuarios finales, por lo que solo necesita su aplicación JBOSS para conocer la ruta de un directorio que está asignado a un host virtual de Apache?

Entonces, básicamente, cree un archivo y guárdelo como /var/www/html/myappfiles/tempfile.pdf (la carpeta que su aplicación conoce), y luego proporcione http://mydomain.com/myappfiles (un host virtual de Apache) para sus usuarios. El resto lo hará el servidor web.

Tendrá que establecer una variable de entorno o propiedad del sistema para que su aplicación sepa dónde reside su carpeta (/ var / www / html / myappfiles / en este ejemplo).

Espero no haberme alejado :)

  1. Estoy de acuerdo con Peter (¡yo, Pete!). Coloque el directorio fuera de su WAR y configure una variable de entorno que apunte a esto. Lea esta publicación por Jacob Orshalick sobre cómo configurar variables de entorno en Seam:

  2. En cuanto a la vista previa de archivos PDF, eche un vistazo a cómo Google Docs maneja la vista previa de archivos PDF: los muestra como una imagen. Para hacer esto con Java, consulte el Sun PDF Renderer .

No estoy seguro de si esto funciona en JBoss, dado que desea una ruta dentro de un archivo WAR, pero podría intentar usar ServletContext.getRealPath (String) .

Sin embargo, personalmente no quisiera que los archivos generados estén dentro de mi aplicación implementada; en su lugar, configuraría un directorio de datos externo en algún lugar como $JBOSS_HOME/server/default/data/myapp

  • Primero, la mayoría de las plataformas usan java.io.tmpdir para establecer un directorio temporal. Algunos contenedores de servlets redefinen esta propiedad para que sea algo debajo de su árbol. ¿Por qué te importa dónde se escribe el archivo?
  • Segundo, estoy de acuerdo con Nicholas: después de generar el PDF en el lado del servidor, puede generar una URL que, al hacer clic, envía el archivo al navegador. Si usa el tipo MIME application/pdf, el navegador debe hacer lo correcto con él.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top