正在解析来自 AWS Chalice multipart/form-data http 请求的 raw_body
Parsing raw_body from AWS Chalice multipart/form-data http request
我有以下简单的 AWS Chalice 路线:
@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
作为参数并允许我解析各个字段,这样我就不必自己编写这样的解析器了?为此尝试 google 很困难,因为返回的大部分结果都与使用 python 来使用 Web API 有关,这不是我想要的。
下面是示例 lambda 代码,它将接受 multipart/form-data 并解析它并获取文件并获取文件类型。
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 添加魔法参考包装
http://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html
我有以下简单的 AWS Chalice 路线:
@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
作为参数并允许我解析各个字段,这样我就不必自己编写这样的解析器了?为此尝试 google 很困难,因为返回的大部分结果都与使用 python 来使用 Web API 有关,这不是我想要的。
下面是示例 lambda 代码,它将接受 multipart/form-data 并解析它并获取文件并获取文件类型。
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 添加魔法参考包装
http://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html