Я пытаюсь выяснить, как получить файл, отправленный браузером через вызов API в Python.
Веб-клиенту разрешено отправлять любые типы файлов (скажем, .txt, .docx, .xlsx, ...). Я не знаю, должен ли я использовать двоичный файл или нет.
Идея была сохранить файл после на S3. Теперь я знаю, что можно использовать js-библиотеки, такие как Aws Amplify, и генерировать временный URL, но я не слишком заинтересован в этом решении.
Любая помощь приветствуется, я много искал решение на Python, но я не могу найти ничего реально работающего!
Мой API является частным, и я использую для установки без сервера.
files_post:
handler: post/post.post
events:
- http:
path: files
method: post
cors: true
authorizer:
name: authorizer
arn: ${cf:lCognito.CognitoUserPoolMyUserPool}
РЕДАКТИРОВАТЬ
У меня есть половинное решение, которое работает для текстовых файлов, но не для PDF, XLSX или изображений, если бы кто-то имел, я был бы очень счастлив
from cgi import parse_header, parse_multipart
from io import BytesIO
import json
def post(event, context):
print event['queryStringParameters']['filename']
c_type, c_data = parse_header(event['headers']['content-type'])
c_data['boundary'] = bytes(c_data['boundary']).encode("utf-8")
body_file = BytesIO(bytes(event['body']).encode("utf-8"))
form_data = parse_multipart(body_file, c_data)
s3 = boto3.resource('s3')
object = s3.Object('storage', event['queryStringParameters']['filename'])
object.put(Body=form_data['upload'][0])