0

サードパーティのサービスは、HttpClient (3.1) を使用して、Jersey (Tomcat 上) を介して提供している URL を取得しています。件名にエラーがスローされています。

これは私がURLを提供する方法です:

@Path("somepath")
@GET
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response download(@Context UriInfo uriInfo)  {
    try {
        URL url = // find the actual URL (a file)
        InputStream stream = url.openStream();
        return Response.ok(stream).build();
    } catch (IOException e) {
        return Responses.notFound().build();
    }
}

これを回避する方法はありますか?

4

1 に答える 1

0

私は最終的に次のようなことをしました:

if (url.getScheme().equalsIgnoreCase("file")) {
  File file = new File(url.toURI());
  return Response.ok(file).header("Content-Length", file.length()).build();
} else {
  return Response.seeOther(url);
}

これは私のユースケースで機能します。

いくつかのメモ:

  • ファイルのサイズが小さい (約 2G 程度) 場合は、ファイル オブジェクトを返すだけで機能しますが、大きいファイルの場合は失敗します。整数オーバーフローが原因で、チャンク化された長さのエンコードが壊れていると思います。
  • StreamingOutput (別の質問で推奨) を返そうとしても、大きなファイルでは機能しません。
于 2012-09-10T03:31:57.393 に答える