我正在编写AWS Lambda函数,需要从AWS 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 ... >
}
答案 0 :(得分:2)
Body
缓冲区包含zip压缩数据(由前几个字节标识),这不仅仅是普通的zlib。
您需要使用一些zip模块来解析数据并提取其中的文件。一个这样的库是yauzl
,它有fromBuffer()
方法,您可以将缓冲区传递给文件条目。