Python 从AWS Chalice多部分/表单数据http请求解析原始\u正文
我有以下简单的AWS圣杯路线:Python 从AWS Chalice多部分/表单数据http请求解析原始\u正文,python,amazon-web-services,http,chalice,Python,Amazon Web Services,Http,Chalice,我有以下简单的AWS圣杯路线: @app.route('/submit', methods=['POST'], content_types=['multipart/form-data']) def submit(): request_info = app.current_request.raw_body return request_info 然后,我使用一个包含多部分数据的简单表单,包括docx文件上载: <form enctype="multi
@app.route('/submit', methods=['POST'],
content_types=['multipart/form-data'])
def submit():
request_info = app.current_request.raw_body
return request_info
然后,我使用一个包含多部分数据的简单表单,包括docx文件上载:
<form enctype="multipart/form-data" method="POST" action="http://localhost:8000/submit">
<input name='foo' type="text">
<br>
<input name="bar" type="file">
<br>
<button type='submit'>
Submit
</button>
</form>
提交
请求的
raw_body
属性只是http请求的字节,我正在寻找一个预先存在的Python库,它可以让我提取每个表单字段,并将docx文件的字节写入磁盘(在本例中是AWS Lambda中的tmp文件夹)。是否有一个库将raw_body
作为参数,允许我解析各个字段,这样我就不必自己编写这样的解析器了?尝试用谷歌搜索是很困难的,因为返回的大多数结果都与使用python来使用web API有关,这不是我想要的。下面是示例lambda代码,它将获取多部分/表单数据,并对其进行解析,获取文件和文件类型
import magic
from io import BytesIO
import json
import cgi
def lambda_handler(event, context):
content_type_obj = event['params']['header']['content-type']
content_type, property_dict = cgi.parse_header(content_type_obj)
form_data = cgi.parse_multipart(BytesIO(event['body-json'].decode('base64')), property_dict)
form_file = form_data['file'][0]
file_type = magic.from_buffer(form_file, mime=True)
file_name = "new_file." + file_type.split('/')[-1] or "txt"
# process your file
# file_type will give you mime type of the file like "image/png"
print file_type
return {'statusCode': 200,
'body': json.dumps({"status": "success",
"message": "your request for uploading has been accepted."}),
'headers': {
'Content-Type': 'application/json',
}}
有关向lambda添加魔力的信息,请参阅包装
cgi库工作正常,尽管它是喜怒无常的。对于任何使用Chalice阅读本文的人来说,我的实际解决方案是对文件进行base64编码,并在路由函数定义中进行解码。这将使数据传输增加一个百分比,但更容易进行故障排除。@JoeStech您可以将zappa与flask一起使用,上传的文件将在request.files中可用,就像我们在flask中通常得到的一样。那么调试就容易多了。更不用说,您将拥有文件mimetype、内容长度等的所有属性。