0

我需要一些关于如何最好地解决这个问题的想法。

我有一个在 JBoss 4.3.3 上运行的 JBoss Seam 应用程序 这个应用程序的一小部分是基于 Open Office 模板生成一个 html 和一个 pdf 文档。

我将生成的文件放在文件系统的 /tmp/ 中。我尝试过使用 System.getProperties("tmp.dir") 和其他一些选项,它们总是返回 $JBOSS_HOME/bin 我想选择路径 $JBOSS_HOME/$DEPLOY/myEAR.ear/myWAR.war/WhateverLocationHere/

但是,我不知道如何在不提供绝对路径或设置 $JBOSS_HOME 和 $DEPLOY 的情况下以编程方式选择路径。

有人知道我该怎么做吗?

第二个问题;我想轻松预览这些生成的文件。通过 JavaScript,或者任何最简单的方法。但是,JavaScript 无法访问服务器上的文件系统,因此我无法通过 JavaScript 打开文件。

有什么简单的解决方案吗?
4

5 回答 5

1

不确定我是否完全了解您要达到的目标,但无论如何我都会尝试一下:

我的假设是您的最终目标是通过 Web 应用程序向最终用户提供一些文件(PDF、HTML)。

在这种情况下,为什么不让 Apache 将这些文件提供给最终用户,所以您只需要 JBOSS 应用程序知道映射到 Apache 虚拟主机的目录的路径。

所以基本上,创建一个文件并将其保存为 /var/www/html/myappfiles/tempfile.pdf (您的应用程序知道的文件夹),然后将http://mydomain.com/myappfiles(一个 Apache 虚拟主机)提供给您的用户。其余的将由 Web 服务器完成。

您必须设置环境变量或系统属性,以让您的应用程序知道您的文件夹所在的位置(本例中为 /var/www/html/myappfiles/)。

希望我没有离开:)

于 2009-01-06T10:10:29.070 回答
1
  1. 我同意彼得(哟彼得!)。将目录放在您的 WAR 之外并设置一个指向它的环境变量。阅读 Jacob Orshalick 的这篇文章,了解如何在 Seam 中配置环境变量:

  2. 至于预览 PDF,请查看 Google Docs 如何处理预览 PDF - 它将它们显示为图像。要使用 Java 执行此操作,请查看Sun PDF Renderer

于 2009-01-07T19:04:46.307 回答
1

不确定如何生成 PDF,但如果可能,请一起跳过磁盘 IO,将 PDF 内容存储在 a 中byte[],然后在 servlet 中将其刷新给用户,将 mime 类型设置为application/pdf* 以响应指定的 URL通过客户端中的链接或<div>通过javascript动态设置。无论如何,您可能会受到内存冲击,除了跳过 IO 之外,您不必担心在完成预览后删除 tmp 文件。

*****我认为这是正确的。需要查一下。

于 2009-01-08T22:19:09.207 回答
0

我不确定这是否适用于 JBoss,因为您想要 WAR 存档中的路径,但您可以尝试使用ServletContext.getRealPath(String)

但是,我个人不希望生成的文件位于我部署的应用程序中;相反,我会在某个地方配置一个外部数据目录$JBOSS_HOME/server/default/data/myapp

于 2009-01-06T15:58:02.910 回答
0
  • 首先,大多数平台用于java.io.tmpdir设置临时目录。一些 servlet 容器将这个属性重新定义为它们的树下的东西。为什么你关心文件的写入位置?
  • 其次,我同意 Nicholas 的观点:在服务器端生成 PDF 后,您可以生成一个 URL,单击该 URL 时,将文件发送到浏览器。如果你使用 MIME type application/pdf,浏览器应该用它做正确的事情。
于 2009-01-10T18:00:35.383 回答