Клиент Jetty 9, значение Content-Range правильно не работает - PullRequest
1 голос
/ 25 апреля 2020

Я использую Jetty 9.4 HttpClient, чтобы попытаться перезапустить загрузку большого файла. Я использую сервер Jetty 9.4.

    final InputStreamResponseListener listener = new 
     InputStreamResponseListener();  
    final Request request = httpClient.newRequest(urlString);                                request.scheme(getUriScheme(urlString)).method(HttpMethod.GET).version(HttpVersion.HTTP_1_1).send(listener);
if (range > 0){
                            request.header("Range", "bytes=" + file.length() + "-")
}

         final Response response = listener.get(getHttpConnTimeout(), TimeUnit.SECONDS);

         // Get content length from response header
         contentLength = response.getHeaders().getField(HttpHeader.CONTENT_LENGTH).getLongValue();
            if (response.getStatus() == HttpStatus.PARTIAL_CONTENT_206) {
            return listener.getInputStream();
        }
         if (response.getStatus() == HttpStatus.OK_200) {
                    return listener.getInputStream();
         }

Однако, когда я использую реализацию Java, все работает нормально (имеется в виду, что не используется Jetty 9 HttpClient)

 if (httpURLConnection != null) { 
     // This works              
     httpURLConnection.setRequestProperty("Range", "bytes=" + file.length() + "-");
 }
 if (httpsURLConnection != null) {
     // This works
     httpsURLConnection.setRequestProperty("Range", "bytes=" + file.length() + "-");
 }

Что такое Я делаю не так? У кого-нибудь есть рабочий пример?

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Джулиан прав. Это помогло мне устранить клиент Jetty как проблему с кодом. Оказалось, что серверу Jetty требуются «частичные» (иначе говоря, допустимые диапазоны) загрузки для выполнения следующих действий (в противном случае Jetty HttpClient не будет работать с партиалами.):

ResourceHandler rh = new ResourceHandler();
rh.setAcceptRanges(true);

Теперь все работает хорошо. Мой фрагмент кода был изменен в надежде помочь кому-то еще в будущем.

0 голосов
/ 25 апреля 2020

Это (AFAIU) "header ()", а не "param ()".

Кроме того, "Content-Range" не входит в запрос .

...