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

我有一个在JBOSS 4.3.3上运行的JBOSS接缝应用程序,该应用程序的一小部分是基于开放的Office模板生成HTML和PDF文档。

生成的文件放在文件系统的 /tmp/ 内。我已经尝试了system.getProperties(“ tmp.dir”)和其他一些选项,并且他们总是返回$ jboss_home/bin,我想选择$ jboss_home/$ decliment/myear/myear/mywar.war.war.war/whyinglocation here/whying here/

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

Anybody know how I can do this?

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

Any easy solutions out there?
有帮助吗?

解决方案

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

*****我认为这是对的。需要查阅。

其他提示

不确定我是否完全掌握了你想要达到的目标,但无论如何我都会试一试:

我的假设是你的最终目标是通过网络应用程序为最终用户提供一些文件(PDF,HTML)。

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

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

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

希望我没有离开:)

  1. 我同意彼得(哟皮特!)。将目录放在WAR之外并设置指向此的环境变量。阅读这篇文章作者Jacob Orshalick关于如何在Seam中配置环境变量:

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

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

但是,我个人不希望生成的文件在我部署的应用程序中;相反,我会在$JBOSS_HOME/server/default/data/myapp

之类的地方配置一个外部数据目录
  • 首先,大多数平台都使用 java.io.tmpdir 设置临时目录。某些 Servlet 容器会将此属性重新定义为位于其树下的内容。为什么你关心文件写入的位置?
  • 其次,我同意尼古拉斯的观点:在服务器端生成 PDF 后,您可以生成一个 URL,单击该 URL 将文件发送到浏览器。如果您使用 MIME 类型 application/pdf, ,浏览器应该用它做正确的事情。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top