web-dev-qa-db-ja.com

Java Jerseyを使用してファイルを返す

Java Jerseyを使用してRESTサービスを実装しています。サービスが提供すべき1つのことは、ファイルのダウンロードオプションです。これらのファイルは非常に大きく、構築されていますデータベースからのデータから。

現在、私はデータベースからすべてのデータをフェッチしてファイルに保存し、

Response.ok().entity(new FileInputStream(file)).build();

Dbからデータを完全にダウンロードせずにファイルの提供を開始する方法はありますが、データがdbから取得されると、それを出力ストリームに追加しますか?

21
digy

いかがですか

File fileToSend = getFile();
return Response.ok(fileToSend, "application/Zip").build();

メディアタイプは、送信されるファイルと一致するように設定できます。

これはかなり簡単に見えますが、より重要なことは、Javaこれを読んでいる専門家がソリューションのパフォーマンスの問題を確認していますか?

8
nishantkyal
8
digy

基盤となるデータベース接続/ドライバーのタイプによって異なります。JDBCレイヤーにアクセスできる場合(Hibernateを使用するなど)、JDBCストリーミングAPIを使用してデータをストリーミングし、ResultSetからストリームを取得してジャージーのレスポンスに渡すことができます。ビルダー。私はこれを自分でやったことはありません。

ここをチェックしてください:

0
fasseg

データベースからストリームを取得したいですか?

それが可能かどうかさえわかりません。

ただし、データを送信するために一時ファイルを作成する必要はありません。ファイルに書き込む代わりに、 ByteArrayInputStream を使用して、バイト配列でデータをそこに置くことができます。

0
Colin Hebert