Java Jerseyを使用してRESTサービスを実装しています。サービスが提供すべき1つのことは、ファイルのダウンロードオプションです。これらのファイルは非常に大きく、構築されていますデータベースからのデータから。
現在、私はデータベースからすべてのデータをフェッチしてファイルに保存し、
Response.ok().entity(new FileInputStream(file)).build();
Dbからデータを完全にダウンロードせずにファイルの提供を開始する方法はありますが、データがdbから取得されると、それを出力ストリームに追加しますか?
いかがですか
File fileToSend = getFile();
return Response.ok(fileToSend, "application/Zip").build();
メディアタイプは、送信されるファイルと一致するように設定できます。
これはかなり簡単に見えますが、より重要なことは、Javaこれを読んでいる専門家がソリューションのパフォーマンスの問題を確認していますか?
基盤となるデータベース接続/ドライバーのタイプによって異なります。JDBCレイヤーにアクセスできる場合(Hibernateを使用するなど)、JDBCストリーミングAPIを使用してデータをストリーミングし、ResultSetからストリームを取得してジャージーのレスポンスに渡すことができます。ビルダー。私はこれを自分でやったことはありません。
ここをチェックしてください:
データベースからストリームを取得したいですか?
それが可能かどうかさえわかりません。
ただし、データを送信するために一時ファイルを作成する必要はありません。ファイルに書き込む代わりに、 ByteArrayInputStream を使用して、バイト配列でデータをそこに置くことができます。