2016-08-24 2 views
3

У меня установлена ​​лазурная функция, которая запускается из blob, добавляемого в конкретный контейнер. Blob - это .zip-файл, который я намерен использовать adm-zip, чтобы извлечь blob в каталог, а затем прочитать содержимое. Я смущен о документации здесь: https://github.com/Azure/azure-content/blob/master/articles/azure-functions/functions-bindings-storage.md#blob-trigger-supported-types Что говорит, что входной параметр может быть либо объектом, либо строкой. Я не вижу никакого места в функции.json, чтобы указать, что я хочу, чтобы вход был.Azure Функции: как читать вкладку blob для nodejs?

В моем коде ниже тип кажется строкой, но поскольку он ничего не печатает, я предполагаю, что это фактически буфер байтов, представляющий содержимое файла. Чтобы работать с этим, Я попытался записать буфер в локальный файл, но он не был успешным. Он не выдаст ошибку или распечатать 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. Каков тип входного параметра для функции для blobs?

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

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

Обновление: Я считаю, что это не удается из-за попытки использовать файловую систему и открыли отдельный более изолированный вопрос здесь: Azure Functions: Nodejs, What are restrictions/limitations when using file system?

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

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

ответ

7

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

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

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

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