Самый практичный способ читать большой двоичный объект Azure (PDF) в облаке?

Aug 18 2020

Я в некотором роде новичок и никогда раньше не имел дела с облачными решениями.

Моя программа использует библиотеку PDFBox для извлечения данных из PDF-файлов и переименования файла на основе данных. В настоящее время это все локально, но в конечном итоге необходимо будет развернуть как функцию Azure. PDF-файлы будут храниться в контейнере BLOB-объектов Azure - триггер хранилища BLOB-объектов Azure для Функций Azure является важной причиной для этого выбора.

Конечно, я могу загрузить blob локально и прочитать его, но программа должна работать исключительно в облаке. Я пробовал читать капли напрямую с помощью Java, но это приводило к бессмысленным данным и несовместимо с PDFbox. Сейчас я планирую временно хранить файлы где-нибудь в облаке (например, OneDrive, хранилище файлов Azure) и попробовать открыть их оттуда. Однако похоже, что это может быстро превратиться в излишне беспорядочное решение. Мои вопросы:

(1) Есть ли способ открыть большой двоичный объект как файл, а не как CloudBlockBlob, поэтому этот дополнительный шаг не нужен?

(2) Если нет, то какое временное хранилище рекомендуется использовать в этом случае?

(3) Есть ли альтернативные пути решения этой проблемы?

Ответы

2 krishg Aug 29 2020 at 16:30

Поскольку вы планируете функцию Azure, вы можете использовать триггер / привязку большого двоичного объекта для непосредственного получения байтов. Затем вы можете использовать метод загрузки PDFBox PdfDocument для непосредственного построения объекта PDDocument.load(content). Вам не понадобится временное хранилище для хранения файла для его загрузки.

@FunctionName("blobprocessor")
public void run(
  @BlobTrigger(name = "file",
               dataType = "binary",
               path = "myblob/{name}",
               connection = "MyStorageAccountAppSetting") byte[] content,
  @BindingName("name") String filename,
  final ExecutionContext context
) {
  context.getLogger().info("Name: " + filename + " Size: " + content.length + " bytes");
  PDDocument doc = PDDocument.load(content);
  // do your stuffs
}