我正试图弄清楚如何通过Python中的API调用接收浏览器发送的文件。
允许Web客户端发送任何类型的文件(例如.txt,.docx,.xlsx,...)。 我不知道我是否应该使用二进制文件。
想法是在S3之后保存文件。 现在我知道可以使用像Aws Amplify这样的js库并生成一个临时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])