405 setChunkedStreamingMode()出错

时间:2016-09-30 12:24:53

标签: java glassfish jersey-2.0

我正在尝试从我的服务器下载文件。我的问题是,如果我使用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);
}

1 个答案:

答案 0 :(得分:0)

我终于通过在setChunkedStreamingMode(4096);中为HTTPUrlConnection设置了客户端配置的以下属性来解决这个问题:

.property(ClientProperties.REQUEST_ENTITY_PROCESSING, "CHUNKED");