私は大きなファイルをダウンロードして、別のサーバーのRestControllerを介してストリームする必要があるRestControllerによって提供されます。エンドサーバを直接呼び出すと、結果ストリームは正常に処理されます。ただし、RestTemplateを使用してこのサーバーを呼び出してからOutputStreamにレスポンスを書き込むと、レスポンスはファイル全体が準備ができてからストリーミングされるまでフロントサーバーでバッファリングされます。 OutputStreamにファイルを書き込む方法はありますか?RestTemplateを使用したストリームファイルのダウンロード
現時点では、フロントサーバー上の私のコードは、私がバッファリングしないように、私のRestTemplateを設定していると私はこれが使用されている要求の種類を確認することで動作していることを確認した。この
@ResponseBody
public void downloadResults(HttpServletRequest request, HttpServletResponse response, @RequestParam("id") String jobId, OutputStream stream)
throws IOException
{
byte[] data = restTemplate.exchange("http://localhost/getFile", HttpMethod.POST, requestEntity, byte[].class, parameters).getBody();
stream.write(data);
}
に似ています、(SimpleStreamingClientHttpRequest)。すべてはそのわずかだけではなく、それは
エンティティを構築するためのレスポンスを読み込むので、 'RestTemplate'を使うのは正しいアプローチではないのですか?' HttpClient'のような他のアプローチを試してください。 – shachar
私はZuulを通してリクエストを代理しているので、RestTemplateする必要があります。 'ClientHttpRequestInterceptor'を使う必要があります - 私はまだ' HttpClient'でインターセプタを使うことができますか? – ali2992
私は 'RestTemplate'を使う代わりに' HttpUrlConnection'を使って基本的なhttpリクエストを行いました。 'EurekaClient'を使って正しいプロキシされたルートを取得しました。オンラインで見ると、@shacharは正しいと思われ、RestTemplateは 'HttpEntity'でレスポンスをラップしようとしているときにいつもバッファリング効果を持ち、すべてのデータが準備完了するのを待たなければなりません – ali2992