В документации для возвращаемого объекта мало что сказано о теле или даже о isBase64Encoded.
Шаги по воспроизведению
- Создайте Lambda (я просто делаю это в консоли)
- Включите image.png (подойдет любое изображение, если оно не слишком большое).
- Создайте основной скрипт Python (например, lambda_function.py)
Код: Выделить всё
from base64 import b64encode
with open("image.png", 'rb') as f:
image_b = f.read()
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': image_b,
"headers": {
"content-type": "image/png"
},
}
Я получаю:
Код: Выделить всё
{
"statusCode": 200,
"body": "\ufffdPNG\r\n\u...\ufffd",
"headers": {
"content-type": "image/png"
}
}
Откройте URL-адрес функции в браузере, а также попробуйте загрузить его в файл с помощью Curl.
В Firefox я получаю:

Извините за французский. Я снова переключил Firefox на английский, но сообщение об ошибке по какой-то причине все еще на французском языке. В нем говорится:
Изображение не может быть отображено, поскольку оно содержит ошибки.
В Chromium я получаю «разбитое изображение»:

(Это не изображение, которое я загрузил.)
Если я сверну файл, откройте его:

Я попробовал кодировку base64, чтобы вернуть строку, поскольку в документации упоминается isBase64Encoded.
Код: Выделить всё
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': b64encode(image_b).decode(), # string
"headers": {
"content-type": "image/png"
},
"isBase64Encoded": True
}
Является ли, что полезные данные двоичного возврата просто не поддерживаются URL-адресами функции AWS Lambda? Какова цель isBase64Encoded, если не возвращать двоичный код?
Сравнение входных и выходных файлов
Исходный файл имел размер 21,2 КБ. Возвращенный файл имеет размер 38,3 КБ. Поэтому я не думаю, что достигаю какого-либо ограничения на размер возвращаемой полезной нагрузки, и не думаю, что это связано с сжатием. (Возвратную полезную нагрузку невозможно заархивировать.) Если бы URL-адрес лямбда-функции вернул строку в кодировке Base64, это объяснило бы увеличение размера, однако я не думаю, что именно это и произошло.
Когда я сравниваю исходный файл и возвращенный файл с заголовком (по общему признанию, это плохой способ просмотра двоичных файлов), они выглядят одинаково.
Исходный файл:
Код: Выделить всё
�PNG
�
IHDR��|��d�tEXtSoftwaregnome-screenshot��>)tEXtCreation Timejeu. 26 f�vr. 2026 21:40:01��� IDATx��yܝg]�����>۳gOHJ����MY
B,Њ��OAQp�p���H���T`ppWpT�,mѲi)�JۤiҤٞ
Подробнее здесь: [url]https://stackoverflow.com/questions/79897384/how-to-return-binary-from-aws-lambda-with-function-url[/url]
Мобильная версия