2017-05-05 40 views
0

私は、アクションクラスに当たるまでファイルをメモリに保持し、ファイルをディスクに書き込まないようにする必要があります。ディスク上に数秒間存在していても、ファイルがアップロードされているサーバー上で悪用される恐れがあります。私は、Struts2フレームワークがファイルを一時的にディスクに格納するという1つの解決策にしかセットアップされていないと感じています。これは正しい仮定ですか、何かが本当にシンプルでないのですか?私は考えることができるStruts 2ファイルアップロードを使用して一時ファイルを作成することはできますか?

答えて

0

私はこの問題を解消できるので、アップロードされたファイルを一時的にディスクに保存しないという要件をどのように達成したかを共有したいと考えました。

まず、アップロードするファイルの合理的な最大サイズに同意し、一度に1つのファイルのみをアップロードできるようにしました。この合意が成立しないことにより、私の解決策はうまくいかないでしょう。

私が使用したスト​​ラットのプラグイン機能があります。私はJarkartaMultiPartRequestクラスに基づいて独自のMutiPartRequestプラグインとクラスを作成しました。ファイルシステムへのすべての書き込みをコメントアウトしました。最大ファイルサイズを10MBに設定します。パーサーのsizeThresholdを10MBより少し大きく設定します。 sizeThresholdをmaxSizeより大きく設定すると、アップロードされたファイルのバイト配列全体を保持する1つのアイテムがメモリ内に作成されました。私はhttp要求で私のメモリバイト配列を保持するカスタム属性を作成したので、アクションクラスでアクセスすることができました。私はバイト配列を得るために見つけることができる他の方法はありませんでした。

私がやらなければならなかったいくつかのクリーンアップ項目がありましたが、全体的にアプローチはうまくいくように見えました。

0

一つの方法は、(/tmpのサブディレクトリとして)ファイルシステム上のディレクトリにstruts.multipart.saveDirを設定し、そのディレクトリには、メモリ・バックアップストレージとしてマウントされていることであろう。そうすれば、ディスク上に何も存在しないことが保証されます。

しかし、ファイルシステムがメモリでバックアップされていても、その一部はいくつかの低水準OSメカニズム(ページングなど)によってディスクに書き込まれる可能性があります。しかし、これはメモリバックアップされたファイルシステムだけでなく、メモリに格納されているものにも当てはまります。この記憶域を絶対にメモリに残して、ページを作成しない場合は、もう少し創造的にし、ファイルシステムによってバックアップされたメモリが常に「常駐」であることを確認する必要があります。

+0

ディスクに保存しないという要件を満たす非常に創造的な方法です。問題は、ファイルのように見え、ファイルのようにアクセスできる場合には、これは成功しません。 –

関連する問題