2011-07-28 4 views
1

残念ながらwebservice経由で取得されたファイルをユーザーがダウンロードするために使用するアプリケーションがあります。サーブレットからブラウザにファイルを送信するときに出力ストリームには何が起こりますか?

私は多くのドキュメントを同時に

質問:ユーザーがwebageのダウンロードを押すと、私はoutputstreamで書き込みを開始しますが、ユーザーは「保存」または「保存」のポップアップを受け取ります。キャンセル "をクリックするとどうなりますか? 文書を保存するまではどうなりますか? キャンセルを押すとどうなりますか?

出力ストリームは、ユーザーが[保存]を押すまで書き込み時にブロックされますか?

おかげで...

答えて

1

いいえ、出力ストリームがロックされていない、それはバッファリングされていますし、あなたのサーブレットコンテナが、それはあなたがフラッシュ(と送信強制右の時間(またはだと思ったときに、それがクライアントに送信されていますが)上の呼び出しそれ)。

サーバーのインフラストラクチャ(Webサーバーの前にリバースプロキシがあるかどうか)によっては、リクエストが失敗する可能性もありますが、通常は気にする必要はありません。

メモリの問題に関しては、Webを呼び出してリクエスト出力ストリームに直接書き込むか、これをファイルに書き込んでからこのファイルをチャンクに書き込んで回避する必要がありますあまりにも多くのメモリを使用し、メモリ不足のためにサーバーを停止させることがあります。

+0

おかげさまで、入力ストリームから読み込み、出力ストリームに直接書き込むことができますが、ダウンロードされたファイルの内容は、SOAPメッセージのペイロードに文字列として来るのが良いでしょう。私はgetContentを持っています。それは大きな大きな文字列です...私はそれが私にとってではないので、今のところそれで生きなければなりません。 – Cris

+0

ユーザがダウンロードを押すと、サーバからのコードで出力ストリームに書き出しを開始すると、クライアントはファイルを保存するかキャンセルするかを指定してダウンロードポップアップを取得します。 ... :) – Cris

+0

ブラウザは通常この時点でファイルをダウンロードしていますが、これは実装に依存します。彼らはあなたのサーブレットからの回答をすでに受け取っているので、彼らはファイルをダウンロードしています。これは、Google Chromeから実行ファイルをダウンロードすることで確認できます。また、「はい」と言う前にファイルをダウンロードすることもあります。 –