2016-03-18 3 views
2

Я пишу функцию AWS Lambda, которая должна загружать файлы с AWS S3, распаковывает файл и возвращает содержимое в виде строки.Node.js: Загрузите файл с s3 и разархивируйте его в строку

Я пытаюсь это

function getObject(key){ 
    var params = { 
    Bucket: "my-bucket", 
    Key: key 
    } 
    return new Promise(function (resolve, reject){ 
    s3.getObject(params, function (err, data){ 
     if(err){ 
     reject(err); 
     } 
     resolve(zlib.unzipSync(data.Body)) 
    }) 
    }) 
} 

Но получаю ошибку

Error: incorrect header check 
    at Zlib._handle.onerror (zlib.js:363:17) 
    at Unzip.Zlib._processChunk (zlib.js:524:30) 
    at zlibBufferSync (zlib.js:239:17) 

Данные выглядит следующим образом

{ AcceptRanges: 'bytes', 
    LastModified: 'Wed, 16 Mar 2016 04:47:10 GMT', 
    ContentLength: '318', 
    ETag: '"c3xxxxxxxxxxxxxxxxxxxxxxxxx"', 
    ContentType: 'binary/octet-stream', 
    Metadata: {}, 
    Body: <Buffer 50 4b 03 04 14 00 00 08 08 00 f0 ad 6f 48 95 05 00 50 84 00 00 00 b4 00 00 00 2c 00 00 00 30 30 33 32 35 2d 39 31 38 30 34 2d 37 34 33 30 39 2d 41 41 ... > 
} 

ответ

2

The Body буфер содержит ZIP-сжатых данных (это идентифицированных по первым байтам), что не просто просто zlib.

Вам нужно будет использовать некоторый zip-модуль для анализа данных и извлечения файлов внутри. Одна из таких библиотек - yauzl, которая имеет метод fromBuffer(), который вы можете передать в буфер и получить записи в файле.

+0

не уверен, что я понял ваш ответ. Если я передаю 'data.Body' в' yauzl.fromBuffer', я получаю объект 'ZipFile' в обратном вызове. Как я могу это использовать? Я не могу передать его в 'zlib.unzipSync', так как он ожидает Buffer. –

+1

Readme для модуля описывает ['ZipFile'] (https://github.com/thejoshwolfe/yauzl#class-zipfile). Он также содержит [пример] (https://github.com/thejoshwolfe/yauzl#usage). – mscdex

+0

спасибо, но он не работает нормально с файлом, к которому я пытаюсь получить доступ. Я получаю сообщение об ошибке в 'zipFile.on (" entry ")'. 'Ошибка: неожиданный EOF ' –