Отправка zip-файла из AWS Lambda

Мне нужна конечная точка (без сервера), которая обслуживает серию файлов, сжатых в 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')

Но когда я пытаюсь реализовать это в лямбде, загруженный 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-файл?

Обновлять

Что я в итоге сделал, чтобы это исправить:


person Purefan    schedule 04.02.2019    source источник
comment
Вы пробовали добавить isBase64Encoded : true в объект ответа?   -  person A.Khan    schedule 04.02.2019
comment
@AtharKhan, поскольку zip не создается как строка base64, я не пробовал это   -  person Purefan    schedule 04.02.2019
comment
@AtharKhan, но я переключился на базу 64 при создании zip и при отправке ответа, и это сработало. Если вы напишете это как ответ, я отмечу это как правильное. Спасибо!   -  person Purefan    schedule 04.02.2019
comment
Добавил в ответ, спасибо :)   -  person A.Khan    schedule 04.02.2019


Ответы (2)


Вы можете попробовать закодировать ответ как строку в кодировке Base64, добавив isBase64Encoded: true в объект ответа.

person A.Khan    schedule 04.02.2019

Самый простой способ сделать это - заархивировать файл и поместить его обратно в ту же корзину, а затем получить SignedUrl для этого файла.

person yodellingbutters    schedule 01.12.2020