Как мне отправить файл в функцию AWS Lambda, обработать его и вернуть файл клиенту? - PullRequest
3 голосов
/ 22 марта 2019

Я использую serverless-http для создания экспресс-конечной точки на AWS Lambda - в общем, довольно просто.В основном это:

  1. POST файл zip через многокомпонентную форму к моей конечной точке
  2. Распакуйте файл (который содержит кучу файлов Excel)
  3. Mergeфайлы в один файл Excel
  4. res.sendFile (файл) файл обратно пользователю

Я не застрял в этом потоке на 100%, но это сутьчто я пытаюсь сделать.

Лямбда-функции ДОЛЖНЫ дать мне доступ к /tmp для хранения, поэтому я попытался возиться с Multer, чтобы хранить там файлы, а затем прочитать содержимое, я 'Мы также попробовали библиотеку decompress-zip, и кажется, что файлы никогда не "работают".Я даже пытался просто загрузить изображение и сразу же отправить его обратно.Он отправляет обратно файлы с именем incoming.[extension], но он всегда поврежден.Я что-то пропустил?Есть ли лучший способ сделать это?

1 Ответ

2 голосов
/ 22 марта 2019

Обычно при работе с файлами подходом является использование S3 в качестве хранилища, и для этого есть несколько причин, но одной из наиболее важных является тот факт, что Lambda имеет ограничение размера события 6 МБ * 1002. *, поэтому вы не можете легко ПОСТАВИТЬ огромный файл прямо к нему.

Если ваши заархивированные файлы Excel всегда будут меньше, тогда вы в этом уверены. Если нет, то вам следует взглянуть на другой поток, возможно, на что-то, использующее функции шага AWS с лямбдами и S3.

Что касается вашей проблемы с разархивированием файла, я лично использовал и могу порекомендовать adm-zip , который будет выглядеть примерно так:

//unzip and extract file entries
var zip = new AdmZip(rawZipData);
var zipEntries = zip.getEntries();
console.log("Zip contents : " + zipEntries.toString());
zipEntries.forEach(function(entry){
    var fileContent = entry.getData().toString("utf8");
});
...