Эффективный способ загрузки файлов из удаленного хранилища

Я создал приложение Java для хранения и загрузки больших файлов, поэтому, когда клиент загружает файл, он будет передан на сервер, который отправит его в облачную службу хранилища (хранилище озера данных лазурного цвета), однако, когда пользователь пытается загрузить файл запрос отправляется на сервер, затем сервер отправит запрос в службу хранения, и передача файла начнется между сервером и службой хранения, в то время как клиент будет ждать завершения передачи между этими двумя, и это может занять много времени (шаг 3 на изображении ниже). Мне интересно, есть ли способ одновременно загрузить то, что уже было собрано из лазурного?

Эффективный способ загрузки файлов из удаленного хранилища

Вот мой код:

@RequestMapping(value = "download", method = RequestMethod.GET, produces = "application/zip")
public ResponseEntity < Resource > download(@PathVariable String path) throws IOException {

    InputStream stream = azureDataLakeStoreService.getFile(path);
    InputStreamResource resource = new InputStreamResource(stream);

    return ResponseEntity.ok()
        .header(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, HttpHeaders.CONTENT_DISPOSITION)
        .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=download.zip")
        .contentType(MediaType.parseMediaType("application/octet-stream"))
        .body(resource);
}

Это помогает: stackoverflow.com/questions/29637151/…? (Я предполагаю, что вам нужен такой потоковый вывод, а затем вы просто передаете байты, поступающие с вашего сервера хранения, сразу на клиент)

GhostCat 16.11.2018 16:28

То, что вы используете, должно работать. Я только что убедился, что обслуживает файл с локального диска. Не могли бы вы поделиться тем, что происходит в методе getFile? Думаю, тут может быть какая-то проблема.

piotr szybicki 16.11.2018 17:22
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
70
0

Другие вопросы по теме