2012-07-11 14 views
5

私は、Apache Commons経由でストリーミングファイルのアップロードを行う方法について、thisガイドを見ました。これは私にデータが保存されている場所を考えさせましたか?そして、その場所を「閉じる」または「クリーン」する必要がありますか?Apache Commons経由のストリーミングファイルアップロード中にデータが保存される場所はどこですか?

ありがとうございます!

答えて

5

どこのデータが格納されていますか?

保存されていないと思います。 Streaming APIはDiskFileItemFactoryを使用しません。しかし、BalusCが投稿したときにデータをコピーするためのバッファを使用します。アップロードの流れを持っていたら、イム間違っているが、しかし、ストリーミングAPIは、任意のDiskFileItemFactoryオブジェクトを使用していない場合 、あなたは私を修正API

3

ここにDiskFileItemFactoryのjavadocがあります。

デフォルトのFileItemFactory実装。この実装 は、内容をメモリに保持するFileItemインスタンスを作成します。小さいアイテムの場合は 、大きいアイテムの場合はディスクの一時ファイルに保存します。 コンテンツがディスクに格納されるサイズしきい値は、 となります。また、一時ファイルが作成されるディレクトリは となります。ファイルアイテムのために作成されている

Size threshold is 10KB. 
Repository is the system default temp directory, as returned by System.getProperty("java.io.tmpdir"). 

一時ファイルは、上の後で を削除する必要があります。それ以外の場合は設定されていない場合は は、次のように

は、デフォルトの設定値です。これを行う最善の方法は、FileCleaningTracker、DiskFileItemFactoryで設定できる を使用することです。ただし、 のようなトラッカーを使用する場合は、次の点を考慮する必要があります。一時ファイル は不要になったら自動的に削除されます。 (More )Fileの対応するインスタンスがゴミである場合 が収集されます。これはFileCleanerクラスがロードされたときに自動的に開始される といういわゆるリーパースレッドによって行われます。 ウェブが アプリケーションが終了した場合など、そのスレッドを終了させることができます。 commons-fileuploadのユーザー ガイドの「リソースのクリーンアップ」のセクションを参照してください。

FileItemは、ディスク上の実際のファイルを示すことができるように、はいclosecleanupは、必要です。

+0

long bytesCopied = Streams.copy(yourInputStream, yourOutputStream, true); 

ルックを使用することができます。またはその使用が暗示されていますか? – user571099

+0

@ user571099。質問のリンクをたどり、そのページの上にある「User Guide」をクリックすると、DiskFileItemFactoryがどのように使用されているかがわかります。 –

+0

@Alexander Pogrebnyak、私はuser571099が正しいと思います。ユーザーガイドは、ファイルアップロードの従来の方法(ノンストリーミングの共通ファイルアップロード方法)を参照しています。ファイルを削除する必要があります。この目的のために、リーパースレッドがあります。ストリーミングAPIでは、Stream APIのDiskFileItemは使用されませんが、DiskFileItemFactoryを使用しないサンプルの使用法がわかります。元の質問に答えるために、データはbyte []の形でメモリに格納されます。はい、InputStreamを閉じる必要があります。 Acceptedの回答が正しい。 –

2

Javaメモリにbyte[]として保存されています。

関連する問題