我正在尝试弄清楚如何通过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])