从AWS Chalice multipart / form-data http请求

时间:2017-07-17 05:10:31

标签: python amazon-web-services http chalice

我有以下简单的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作为参数并允许我解析各个字段,以便我不必自己编写这样的解析器?试图谷歌这是很困难的,因为大部分结果都与使用python使用Web API有关,这不是我想要的。

1 个答案:

答案 0 :(得分:-1)

下面是示例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