JBossのサーバーでファイルをプレビューする方法
-
03-07-2019 - |
質問
この問題を最善の方法で解決するためのアイデアが必要です。
JBoss 4.3.3で実行しているJBoss Seamアプリケーションがあります このアプリケーションの小さな部分は、Open Officeテンプレートに基づいてhtmlおよびpdfドキュメントを生成します。
生成されたファイルは、ファイルシステムの/ tmp /に配置します。 System.getProperties(<!> quot; tmp.dir <!> quot;)およびその他のオプションを試しましたが、常に$ JBOSS_HOME / binを返します パスを選択したい$ JBOSS_HOME / $ DEPLOY / myEAR.ear / myWAR.war / WhateverLocationHere /
ただし、絶対パスを指定したり、$ JBOSS_HOMEと$ DEPLOYを設定せずにプログラムでパスを選択する方法はわかりません。
Anybody know how I can do this?
2番目の質問。 これらの生成されたファイルを簡単にプレビューしたいと思います。 JavaScriptを使用するか、最も簡単な方法を使用します。ただし、JavaScriptはサーバー上のファイルシステムにアクセスできないため、JavaScriptを使用してファイルを開くことはできません。
Any easy solutions out there?
解決
PDFの生成方法がわからないが、可能であれば、ディスクIOをすべてスキップし、PDFコンテンツをbyte[]
に隠して、MIMEタイプをapplication/pdf
に設定するサーブレットでユーザーにフラッシュします。 *クライアントのリンクで指定されたURLまたはJavaScriptによって<div>
で動的に設定されたURLに応答します。とにかくメモリヒットを取っているので、IOをスキップすることに加えて、プレビューの完了時にtmpファイルを削除することを心配する必要はありません。
*****これは正しいと思います。調べる必要があります。
他のヒント
あなたが達成しようとしていることを完全に把握しているかどうかはわかりませんが、とにかく試してみましょう:
私の最終的な目標は、いくつかのファイル(PDF、HTML)をWebアプリケーション経由でエンドユーザーが利用できるようにすることです。
その場合、Apacheがこれらのファイルをエンドユーザーに提供しないように、JBOSSアプリケーションに必要なのは、Apache仮想ホストにマップされているディレクトリのパスのみです。
したがって、基本的に、ファイルを作成して/var/www/html/myappfiles/tempfile.pdf(アプリケーションが知っているフォルダー)として保存し、 http://mydomain.com/myappfiles (Apache仮想ホスト)をユーザーに提供します。残りはWebサーバーによって行われます。
環境変数またはシステムプロパティを設定して、フォルダーが存在する場所をアプリケーションに知らせる必要があります(この例では/ var / www / html / myappfiles/)。
うまく行けなかった:)
-
Peter(yo Pete!)に同意します。ディレクトリをWARの外側に置き、これを指す環境変数を設定します。 この投稿 Seamで環境変数を設定する方法についてJacob Orshalickが作成:
-
PDFのプレビューについては、Google DocsがPDFのプレビューを処理する方法をご覧ください-PDFを画像として表示します。 Javaでこれを行うには、 Sun PDF Renderer を確認してください。
これがJBossで機能するかどうかはわかりません。WARアーカイブ内にパスが必要な場合は、 ServletContext.getRealPath(String)。
しかし、個人的には、生成されたファイルをデプロイされたアプリケーション内に入れたくありません。代わりに、$JBOSS_HOME/server/default/data/myapp
- まず、ほとんどのプラットフォームは
java.io.tmpdir
を使用して一時ディレクトリを設定します。一部のサーブレットコンテナは、このプロパティをツリーの下にあるものに再定義します。ファイルが書き込まれる場所を気にするのはなぜですか? - 次に、Nicholasに同意します。サーバー側でPDFを生成した後、クリックするとブラウザーにファイルを送信するURLを生成できます。 MIMEタイプ
application/pdf
を使用する場合、ブラウザはそれを正しく処理する必要があります。