0

第 3 方服务正在使用 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 回答