Я работаю с Python 3.8 на AWS Lambda, и я хотел бы обработать опубликованный файл, например requests.files
с Django. Но это невозможно с AWS Lambda. Я хочу поместить этот файл в S3 с:
s3.put_object(
Body=fileAsString,
Bucket=MY_BUCKET,
Key='my-file.jpg'
)
Когда я возвращаю непосредственно полученное событие, с файлом:
Первая попытка: с 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))}
Я получаю: Я также пытался с form_data['file'][0].decode('utf-8')
, но я получаю: и у меня всегда есть "?"
Я должен получить это, потому что это оригинальное изображение, открытое в редакции:
Вторая попытка: я следую этому уроку: 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, но без изменений.
Есть идеи?