代码之家  ›  专栏  ›  技术社区  ›  Niklas Rosencrantz

使用AWS python lambda读取表单数据

  •  0
  • Niklas Rosencrantz  · 技术社区  · 6 年前

    我想读取http post请求的“key”参数,但它不起作用。

    def my_handler(event, context):
        print(event)
        print(event['body'])
        print("key: " + event['key'])
    
        key = event['query']['key']
    
        encoded_string = str(key).encode("utf-8")
        # Create the file named for example "42.json" containing the appropriate data
        s3_path =  str(key) + '.json'
        s3 = boto3.resource("s3")
        s3.Bucket(BUCKET_NAME).put_object(Key=s3_path, Body=encoded_string)
    
        message = {
           'message': 'Created {}!'.format(key)  
        }
        return {
            'statusCode': 200,
            'headers': {'Content-Type': 'application/json'},
            'body': json.dumps(message)
        }
    

    更新:如果我使用下面的代码,我可以在httppost中读取JSON数据,但仍然不能读取表单数据。

    def my_handler(event, context):
        print(event)
        print(event['body'])
       # print("key: " + event['key'])
        print("key  " + json.loads(event['body'])["key"])
    
        key = json.loads(event['body'])["key"]
    
        encoded_string = str(key).encode("utf-8")
        # Create the file named for example "42.json" containing the appropriate data
        s3_path =  str(key) + '.json'
        s3 = boto3.resource("s3")
        s3.Bucket(BUCKET_NAME).put_object(Key=s3_path, Body=encoded_string)
    
        message = {
           'message': 'Created {}!'.format(key)  
        }
        return {
            'statusCode': 200,
            'headers': {'Content-Type': 'application/json'},
            'body': json.dumps(message)
        }
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   amittn    6 年前

    enter image description here 1我假设您使用的是API网关,那么使用Lambda代理集成是值得的,它位于API网关上的集成请求下。 aws docs

    1. 如果使用此设置,则不需要进行任何映射。
        2
  •  5
  •   bonafidejed    4 年前

    我也有这个问题。我正在使用python3.7开发一个AWS Lambda。花了一天时间,但我发现了。

    此代码将“multipart/form data”主体解析为一个名为 form_data 能够 form_data['key'][0] .

    import cgi
    import io
    
    def handler(event, context):
        print(event)
        print(event['body'])
    
        fp = io.BytesIO(event['body'].encode('utf-8'))
        pdict = cgi.parse_header(event['headers']['Content-Type'])[1]
        if 'boundary' in pdict:
            pdict['boundary'] = pdict['boundary'].encode('utf-8')
        pdict['CONTENT-LENGTH'] = len(event['body'])
        form_data = cgi.parse_multipart(fp, pdict)
        print('form_data=', form_data)