3

GWT と一般的な Web アプリケーションは初めてです。

GWT Web アプリケーションを作成しています。提供される機能の 1 つは、Web ページのボタンをクリックしてファイルをダウンロードすることです。残念ながら、ファイル自体はサーバー側に物理的に配置されていません。サーバー側は、ファイルの InputStream を取得するために、別の Web サービスへの REST 呼び出しを介してそれを取得する必要があります。

私の質問は次のとおりです。

  1. ブラウザがダウンロードを開始できるように、ストリームをクライアント側に渡すにはどうすればよいですか?
  2. これを開始する前に、サーバーにファイルを物理的に書き込む必要がありますか?

どうもありがとう

編集:私はこの例を見つけました: サーブレットでファイルをダウンロードするときにGWTを使用する方法は?

この例では、ファイルはサーバー側に物理的に配置されています。ストリーム経由で Web サービスから取得したファイルは非常に大きく、GWT サーバー側に保存したくありません。助言がありますか?

4

2 に答える 2

4

上記の例のようなサーブレットを使用します。ヘッダーとファイル名が適切なタイプになるように設定してください。(ファイル名は適切な末尾で終わる必要があります)

// process the data (In your case go get it)
byte[] data = generateReturnBuffer();
// do not cache
response.setHeader("Expires", "0");  
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");  
response.setHeader("Pragma", "public");
// content length is needed for MSIE
response.setContentLength(data.length);
// set the filename and the type
response.setContentType("application/pdf");  
response.addHeader("Content-Disposition", "attachment;filename=" + "fileName.pdf");  
ServletOutputStream out = resp.getOutputStream();
out.write(data);
out.flush();

ここで、応答はサーブレット HttpServletResponse です。
有効な MIME タイプについては、こちらをご覧ください
特定のバージョンの Internet Explorer ではファイルの長さが必要になるため、ある時点でデータをファイルまたはメモリに保存する必要があります。

于 2013-03-19T13:20:25.997 に答える
0

入力ストリームを優先形式に変換し、一時ファイルを作成します

File f = File.createTempFile("tmp", "yourformat(.txt)", new File("C:/"));



 // deletes file when the virtual machine terminate
 f.deleteOnExit();

ユーザーをダウンロードする一時ファイルを作成し、終了時に自動的に削除します。

于 2013-03-19T13:24:23.107 に答える