#java #spring-boot #spring-cloud-feign
#java #весенняя загрузка #spring-cloud-симулировать
Вопрос:
У меня есть простой веб-сервис, который передает файл с использованием StreamingResponseBody. Определение выглядит следующим образом:
@GetMapping("/files/{filename}")
public ResponseEntity<StreamingResponseBody> download(@PathVariable String filename) {
...
StreamingResponseBody responseBody = out -> {
...
}
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentLength(byteArray.length);
return new ResponseEntity(responseBody, httpHeaders, HttpStatus.OK);
}
Это работает хорошо, но теперь мне нужно использовать его в клиентском приложении.
Я использую spring для его использования, но я не могу найти способ прочитать поток и записать его в файл по мере его прохождения…
Я пытался использовать feign, но, похоже, он его не поддерживает. Я пытался использовать RestTemplate, но я не могу заставить его работать…
Поддерживает ли Spring потоковую передачу на стороне клиента? Кто-нибудь знает, как это сделать? Возможно, с использованием чистого Java API?
Большое спасибо за вашу помощь!
Комментарии:
1. Вы нашли способ сделать это?
2. Привет, нет, извините. Возможно, я мог бы попытаться переопределить некоторые классы. Но я не нашел никакого решения «из коробки».
Ответ №1:
Вы можете использовать Http-клиент Apache (org.apache.httpcomponents:httpclient:4.5.12):
URI uri = new URIBuilder()
.setScheme(scheme)
.setHost(host)
.setPort(port)
.setPath(url)
.build();
HttpUriRequest request = RequestBuilder.get(uri).build();
try (CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse httpResponse = httpClient.execute(request);
InputStream inputStream = httpResponse.getEntity().getContent()) {
// Do with stream whatever you want, for example put it to File using FileOutputStream and 'inputStream' above.
}
Комментарии:
1. Привет @PavelDudin — ваш ответ правильный — это способ использования URL. Однако вопрос был конкретно о Spring, поэтому вам, возможно, следует упомянуть, что ваш ответ не отвечает на OP.
2. Привет @PavelDudin, спасибо за ваш ответ. MrR прав, я спрашивал конкретно о spring. Но ваш ответ также может быть использован в среде Spring.