Функции Azure: как читать ввод больших двоичных объектов для nodejs?

Я установил лазурную функцию, которая запускается при добавлении большого двоичного объекта в конкретный контейнер. Большой двоичный объект представляет собой файл .zip. Я намерен использовать adm-zip для извлечения большого двоичного объекта в каталог и последующего чтения содержимого. Меня смущает документация здесь: https://github.com/Azure/azure-content/blob/master/articles/azure-functions/functions-bindings-storage.md#blob-trigger-поддерживаемыетипы Это говорит о том, что входной параметр может быть либо объектом, либо строкой. Я не вижу места в файле function.json, чтобы указать, каким должен быть ввод.

В моем коде ниже этот тип выглядит как строка, но, поскольку он ничего не печатает, я предполагаю, что на самом деле это буфер байтов, представляющий содержимое файла. Чтобы поработать с этим, Я попытался записать буфер в локальный файл, но безуспешно. Не было ни ошибки, ни распечатки saved blob to...

В моем function.json у меня есть это:

{
  "bindings": [
    {
      "name": "xmlZipBlob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "balancedataxml",
      "connection": "sc2iq_STORAGE"
    }
  ],
  "disabled": false
}

И затем у меня есть xmlZipBlob в качестве второго аргумента моей функции:

var fs = require('fs');

module.exports = function (context, xmlZipBlob) {
    context.log('Node.js blob trigger function processed blob:', xmlZipBlob);
    context.log(`typeof xmlZipBlob:`, typeof xmlZipBlob);

    fs.writeFile('xmlZip.zip', xmlZipBlob, (err) => {
        if (err) {
            throw err;
        }

        context.log('saved blob to loal file called xmlZip.zip');
        context.done();
    });
};

1. Каков тип входных параметров функции для больших двоичных объектов?

2. Как мне контролировать, является ли входной параметр объектом или строкой?

3. Можно ли использовать собственный модуль node fs для записи в локальную файловую систему для извлечения файла .zip?

Обновление: я считаю, что это не удается из-за попытки использовать файловую систему, и открыл здесь отдельный более изолированный вопрос: Функции Azure: Nodejs, каковы ограничения / ограничения при использовании файловой системы?

4. Есть ли лучшая альтернатива, чем использование файлов .zip?

Пока это не будет решено, я думаю, что придумаю другое решение для работы с файлом .zip. Либо делать все в памяти с потоками, либо избегать файлов .zip вместе и просто создавать большой XML-файл из меньших XML-файлов. В любом случае, похоже, должна быть некоторая документация или предупреждение о том, что потребуется для переноса функции узла, зависящей от файловой системы, на функции Azure.


person Matt Mazzola    schedule 24.08.2016    source источник


Ответы (1)


В функциях узла (в отличие от C #, где вы объявляете тип параметра в определении функции) типом ввода по умолчанию является строка. Если вы пытаетесь выполнить привязку к двоичным данным, вы можете указать это в привязке function.json через свойство dataType, например:

{
  "bindings": [
    {
      "name": "xmlZipBlob",
      "type": "blobTrigger",
      "dataType": "binary",
      "direction": "in",
      "path": "balancedataxml",
      "connection": "sc2iq_STORAGE"
    }
  ]
}

Это передаст входной двоичный объект в вашу функцию как буфер узла. Обратите внимание, что это не потоковая передача - буфер полностью считывается в память.

Что касается вашего вопроса о доступе к файловой системе, я ответил на этот вопрос в другом вашем сообщении SO :)

person mathewc    schedule 31.08.2016