我正在尝试从我的服务器下载文件。我的问题是,如果我使用chunkedStreamingMode
,服务器会返回405 - Method not Allowed
错误。如果我没有设置chunkedStreamingMode
下载完美无缺。
我不明白为什么启用了chunkedStreamingMode
的文件下载会被我的服务器拒绝。我在这里做错了吗?或者我是否需要在服务器上设置一些内容以使chunkedStreamingMode
正常工作?
在我的服务器上,我有:
@GET
@Path("/{fileId}")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response downloadFile(@PathParam("fileId") long fileId, @Context HttpServletRequest req,
@Context HttpServletResponse response) throws IOException {
..
}
在我使用的客户端上:
WebTarget target = rootTarget.path(uri);
Invocation.Builder builder = target.request(MediaType.APPLICATION_OCTET_STREAM_TYPE);
response = builder.get();
我在客户端上使用以下HttpUrlConnectorProvider:
private static HttpUrlConnectorProvider buildHttpUrlConnectorProvider(){
HttpUrlConnectorProvider.ConnectionFactory factory = new HttpUrlConnectorProvider.ConnectionFactory() {
@Override
public HttpURLConnection getConnection(URL url) throws IOException {
HttpURLConnection result = (HttpURLConnection) url.openConnection();
result.setChunkedStreamingMode(4096);
result.setDoOutput(true);
return result;
}
};
return new HttpUrlConnectorProvider().connectionFactory(factory);
}
答案 0 :(得分:0)
我终于通过在setChunkedStreamingMode(4096);
中为HTTPUrlConnection
设置了客户端配置的以下属性来解决这个问题:
.property(ClientProperties.REQUEST_ENTITY_PROCESSING, "CHUNKED");