AWS лямбда Python 3 ручки POST-файла - PullRequest
0 голосов
/ 20 марта 2020

Я работаю с Python 3.8 на AWS Lambda, и я хотел бы обработать опубликованный файл, например requests.files с Django. Но это невозможно с AWS Lambda. Я хочу поместить этот файл в S3 с:

s3.put_object(
    Body=fileAsString,
    Bucket=MY_BUCKET,
    Key='my-file.jpg'
)

Когда я возвращаю непосредственно полученное событие, с файлом:

enter image description here

Первая попытка: с cgi.parse_multipart: I мой обработчик:

c_type, c_data = parse_header(event['headers']['Content-Type'])
boundary = c_data['boundary'].encode('latin1')
body = event['body'].encode('utf8')

fp = BytesIO(body)
pdict = {
    'boundary': boundary,
    'CONTENT-LENGTH': str(len(body))
}
form_data = parse_multipart(fp, pdict)
fileBytes: bytes = form_data['file'][0]
return ({'statusCode': 200, 'body': json.dumps(str(fileBytes))}

Я получаю: enter image description here Я также пытался с form_data['file'][0].decode('utf-8'), но я получаю: enter image description here и у меня всегда есть "?"

Я должен получить это, потому что это оригинальное изображение, открытое в редакции: enter image description here

Вторая попытка: я следую этому уроку: https://medium.com/swlh/upload-binary-files-to-s3-using-aws-api-gateway-with-aws-lambda-2b4ba8c70b8e

Итак, я попробовал:

file_content = base64.b64decode(event['body'])

, но получаю:

string argument should contain only ASCII characters

(то же самое с validate=False), и когда я пытаюсь загрузить тело, как указано в:

body2 = json.loads(event['body'])

, я получаю:

loads failed : Expecting value: line 1 column 1 (char 0)

Я пытался добавить "image / png" и От «image / *» до «Binary Media Types» в настройках API, но без изменений.

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...