从AWS Lambda提供zip文件

时间:2019-02-04 14:58:20

标签: node.js amazon-web-services aws-serverless

我需要一个端点(无服务器),该端点提供一系列压缩为zip文件的文件。为此,我正在使用node-zip。这可以在本地创建带有平面文件文本的简单zip文件:

const fs = require('fs')
const zip = new require('node-zip')()

const flat_text = 'This is a flat text file'

zip.file('a_file.txt', flat_text)
fs.writeFileSync('/tmp/a_file.zip', zip.generate({base64: false, compression: 'DEFLATE'}), 'binary')

但是当我尝试在lambda中实现它时,下载的zip文件已损坏:

module.exports.weekly = async (event, context) => {
    const flat_text = 'This is a flat text file'
    zip.file('a_file.txt', flat_text)
    return {
        headers: {
            'Content-Type': 'application/zip, application/octet-stream',
            'Content-disposition': `attachment; filename=${`any_name_${new Date().toJSON().slice(0, 10)}.zip`}`
        },
        body:  zip.generate({base64: false, compression: 'DEFLATE'}),
        statusCode: 200
    }
}

为什么我的zip文件损坏了?

更新

我最终为解决此问题所做的事情:

2 个答案:

答案 0 :(得分:2)

您可以通过在响应对象中添加isBase64Encoded: true来尝试将响应编码为Base64编码的字符串。

答案 1 :(得分:0)

最简单的方法是将文件压缩并放回同一存储桶中,然后获取该文件的SignedUrl。