Как обрабатывать URL-адрес хранилища больших двоичных объектов при получении из API

#java #spring #azure #azure-blob-storage

Вопрос:

У меня есть URL-адрес API (например: localhost:8080/api/большие двоичные объекты/загрузка/{идентификатор элемента}). Сам API вернет URL-адрес этого элемента в хранилище больших двоичных объектов (например, https://myaccount.blob.core.windows.net/mycontainer/myitem). Теперь у меня есть задача, которая требует, чтобы пользователь скопировал и вставил URL API в браузер и ожидал, что он просмотрит/загрузит элемент.

Вопрос в том, как Java может поддерживать просмотр пользователем URL-адреса хранилища больших двоичных объектов без помощи интерфейса?

Ответ №1:

Вы хотите, чтобы ваше java-приложение загружало файл с заданного URL-адреса?

Нет необходимости во взаимодействии с пользователем.

См. Пример ниже с использованием Java NIO:

Пакет Java NIO предлагает возможность передачи байтов между 2 каналами без буферизации их в памяти приложения.

Чтобы прочитать файл с нашего URL-адреса, мы создадим новый читаемый байт-канал из потока URL-адресов:

 ReadableByteChannel readableByteChannel = Channels.newChannel(url.openStream());
 

Байты, считанные с канала ReadableByteChannel, будут переданы в
Файловый канал, соответствующий файлу, который будет загружен:

 FileOutputStream fileOutputStream = new FileOutputStream(FILE_NAME);

FileChannel fileChannel = fileOutputStream.getChannel();
 

Мы будем использовать метод transferFrom() из класса
ReadableByteChannel для загрузки байтов с данного URL-адреса в наш файловый канал:

 fileOutputStream.getChannel()
  .transferFrom(readableByteChannel, 0, Long.MAX_VALUE);
 

Методы transferTo() и transferFrom() более эффективны, чем
простое чтение из потока с использованием буфера. В зависимости от
базовой операционной системы данные могут быть перенесены непосредственно из
кэша файловой системы в наш файл без копирования каких-либо байтов в
память приложения.

В системах Linux и UNIX эти методы используют метод нулевого копирования, который уменьшает количество переключений контекста между режимом ядра и пользовательским режимом.

Есть и другие библиотеки, которые вы также можете использовать, что может быть лучше, чем использовать Java NIO самостоятельно.

Ссылка: https://www.baeldung.com/java-download-file

Комментарии:

1. Спасибо, Сьюзен, я принял ваш ответ :). Извините за длинный ответ.

2. Не беспокойтесь @Duy, надеюсь, это вам поможет