Как мне ответить необработанным буфером вместо toString в Amazon API Gateway — Lambda

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

Я установил тип содержимого на image/jpeg в ответе интеграции на ответ http 200, но это поврежденное изображение, потому что я думаю, что это toString буфера, а не необработанные данные.

exports.handler = function(event, context) {

    var srcKey = event.key || 'e_1.png';
    var max_size = event.size || 100;


    // Download the image from S3
    s3.getObject({
        Bucket: srcBucket,
        Key: srcKey
    }, function (err, response) {
        if (err)
            return context.fail('unable to download image ' + err);
        var original = gm(response.Body);
        original.size(function (err, size) {
            if (err)
                return context.fail('unable to download image ' + err);

            resize_photo(size, max_size, original, function (err, photo) {
                //res.setHeader('Content-Type', 'image/jpeg');
                context.succeed(photo);
            });
        });
    });

};

person MonkeyBonkey    schedule 12.08.2015    source источник
comment
Я не даю ответа, но вот аналогичный вопрос: stackoverflow.com/questions/31615734/   -  person Erik Sjölund    schedule 25.10.2015


Ответы (1)


Это не похоже на то, для чего были созданы Lambda с API Gateway. Двоичный вывод может не поддерживаться из-за состояния конвейера. Вместо этого попробуйте сделать что-нибудь другое — сохраните изображение обратно в S3 и отправьте обратно HTTP Redirect в новый S3 URI. Пусть клиент обрабатывает это вместо того, чтобы пытаться заставить конвейер API Gateway обрабатывать бинарные ответы.

person adamkonrad    schedule 12.08.2015