Нужно с трудом расстрелять загрузку Http-образа через nodejs и лямбда-искажения - PullRequest
0 голосов
/ 25 июня 2019

Я создал приложение http-сервера nodejs для загрузки удаленного образа, оно прекрасно работает как приложение js автономного узла, но при использовании nodejs aws-lambda файл поврежден.

Я попытался зайти в настройки API шлюза aws и настроить двоичный тип контента, чтобы разрешить все * / *

request.get('https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png', 
        {encoding:'binary'},function(error, response){
            callback(null, { "statusCode" : 200, "headers": { 
                    'Content-Type': 'application/octet-stream',
                    'Cache-Control': 'no-cache',
                    'Content-Disposition': 'attachment; filename="google.png"',
                    'Accept': 'application/octet-stream'
                }, "body" : response.body});
            });

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

Вопрос:

Кто-нибудь сталкивался с такой же проблемой или может дать рекомендации о том, что может быть причиной повреждения файла?

1 Ответ

0 голосов
/ 26 июня 2019

решаемые

Оказалось, что проблема в том, что мне нужно было отформатировать изображение как base64, а затем установить isBase64Encoded в true. Ниже приведен рабочий код.

Шаг 1. Зайдите в GUI для настроек шлюза лямбда-API и установите тип двоичного содержимого, чтобы разрешить все /

Шаг 2. В ответе убедитесь, что вы форматируете двоичный файл изображения, который вы извлекаете как base64, а также передаете флаг isBase64Encoded как true. Это позволит вам вывести файл для скачивания. Если вы не отформатируете его как base64 и не поставите флажок, вы получите закодированную версию файла, которая выглядит и действует как поврежденная.

        responseType: 'arraybuffer'}).then(response => {
        callback(null, {
            statusCode: 200,
            headers: {
                'Content-Type': 'image/png',
                'Cache-Control': 'no-cache',
                'Content-Disposition': 'attachment; filename="google.png"'
            },
            body: Buffer.from(response.data, 'binary').toString('base64'),
            isBase64Encoded: true
        })
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...