Как я могу написать лямбда-функцию в node.js, которая возвращает двоичные данные? - PullRequest
0 голосов
/ 06 ноября 2019

Я хочу написать лямбда-функцию в node.js, которая возвращает двоичные данные. Я бы хотел, чтобы заголовок ответа был «application / octet-stream», но это не является абсолютно необходимым.

Кажется, что это тот случай, когда заголовок ответа всегда равен «application / json» инет никакого способа изменить это.

Документация для функции обратного вызова говорит: «Функция обратного вызова принимает два аргумента: Ошибка и ответ. Объект ответа должен быть совместим с JSON.stringify.»

Я не хочу, чтобы кто-либо «переводил» мои данные в формат или преобразовывал их в JSON. Я просто хочу вернуть буфер байтов в точности как есть.

1 Ответ

1 голос
/ 07 ноября 2019

Я думаю, что у вас есть два варианта: вернуть строку в кодировке base64 или выполнить перенаправление на S3, содержащий ваш двоичный двоичный объект.

Ваш ответ всегда является объектом JSON, но вы можете указать тип содержимого иВы можете использовать base64 для кодирования, чтобы отправлять двоичные данные через API-шлюз.

Кодировка Base64

Не зная много о вашем коде, рассмотрите этот пример:

exports.handler = async (event) => {
    const result = Buffer.from('Hello World!', 'utf8')
    return {
      statusCode: 200,
      headers: {
        'Content-Type': 'application/octet-stream'
      },
      body: result.toString('base64'), // SGVsbG8gV29ybGQh
      isBase64Encoded: true
    }
}

Вывозвращение объекта, но указание тела - это строка в кодировке base64, которую API-шлюз должен преобразовать в поток октетов.

Возможно, вам потребуется настроить API-шлюз, чтобы разрешить */* типы носителей. Вот статья с более подробной информацией .

Перенаправление S3

Другой вариант, который будет иметь больше смысла для больших двоичных объектов, будет записывать ваши двоичные объекты вS3 в виде файлов, а затем вернуть statusCode: 302 с URL-адресом перенаправления на подписанный URL-адрес S3 .

Примерно так:

exports.handler = async (event) => {
    return {
      statusCode: 302,
      headers: {
        'Location': 'http://example.com/example.png'
      }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...