Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从AWS Chalice多部分/表单数据http请求解析原始\u正文_Python_Amazon Web Services_Http_Chalice - Fatal编程技术网

Python 从AWS Chalice多部分/表单数据http请求解析原始\u正文

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

我有以下简单的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="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、内容长度等的所有属性。