2016-09-30 3 views
0

Я пытаюсь загрузить файл с моего сервера. Моя проблема в том, что если я использую chunkedStreamingMode, сервер возвращает мне ошибку 405 - Method not Allowed. Если я не устанавливаю chunkedStreamingMode, загрузка работает отлично.405 Ошибка с setChunkedStreamingMode()

Не понимаю, почему загрузка файла с помощью 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

Возможно, вы могли бы диагностировать это довольно быстро, запустив сервер в отладчике и выполнив его обработчик запросов. Вы найдете место, где он запускает 405. Потенциально он будет окружен некоторой защитой от конфигурации. – slim

+0

Кроме того, чтобы получить ответы, вы должны сообщить нам, какой сервер вы используете. – slim

+0

Кроме того, я обнаружил, что хорошим правилом является избежание «HTTPUrlConnection» - оно полно gotchas. Использование Apache HttpClient экономит много головных болей (но может и не быть проблемой здесь). – slim

ответ

0

я, наконец, решить эту установив для свойства клиента конфигурацию следующего значения: setChunkedStreamingMode(4096); в HTTPUrlConnection:

.property(ClientProperties.REQUEST_ENTITY_PROCESSING, "CHUNKED"); 
Смежные вопросы