Я пытаюсь загрузить файл с моего сервера. Моя проблема в том, что если я использую 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);
}
Возможно, вы могли бы диагностировать это довольно быстро, запустив сервер в отладчике и выполнив его обработчик запросов. Вы найдете место, где он запускает 405. Потенциально он будет окружен некоторой защитой от конфигурации. – slim
Кроме того, чтобы получить ответы, вы должны сообщить нам, какой сервер вы используете. – slim
Кроме того, я обнаружил, что хорошим правилом является избежание «HTTPUrlConnection» - оно полно gotchas. Использование Apache HttpClient экономит много головных болей (но может и не быть проблемой здесь). – slim