【问题标题】:Send image file to AWS Lambda Function将图像文件发送到 AWS Lambda 函数
【发布时间】:2020-11-11 11:06:35
【问题描述】:

我正在尝试使用 Python 将一张图片发送到我的 Lambda 函数,只是为了测试一个项目,但 Postman 给了我一个错误,我不知道如何解决。

我的代码只是检测我是否在键 "image" 中有一些数据并返回一些消息。我正在使用 Postman 发送 POST 请求,我点击了 Body 选项卡,选择了表单数据选项,我为键写了 image 并选择了图像文件从我的电脑(图像大小为 27 kb)。这是我的 Lambda 函数中的代码:

def lambda_handler(event, context):
    if event['image']:
        return {
            "Message": 'Everything went ok'
        }

这是我从 Postman 收到的错误消息:

{ "message": "无法将请求正文解析为 json:意外 数值中的字符('-'(代码 45)):预期数字 (0-9) 到 跟随减号,对于有效的数值\n [来源: (byte[])"----------------------------137965576541301454606184\r\n内容-配置:form-data; name="image "; 文件名="TestImage.png"\r\n内容类型: 图片/png\r\n\r\n�PNG\r\n\n ... }

【问题讨论】:

  • 您为此使用 API 网关吗?图像应设置为二进制播放负载并编码为 base64。
  • 感谢@Marcin,我将图像转换为base64,然后将其发送到服务器
  • 感谢您告诉我:-)

标签: python amazon-web-services api aws-lambda


【解决方案1】:

我为此苦苦挣扎。我正在使用 Postman,得到 UnidentifiedImageError。下面的工作。

发布图片:

data = open('x.jpg','rb').read()
data = base64.b64encode(data).decode("utf8")
r = requests.post('url',data=data)

函数侧处理

def lambda_handler(event, context):
image_bytes = event['body'].encode('utf-8')
img_b64dec = base64.b64decode(image_bytes)
img_byteIO = BytesIO(img_b64dec)
image = Image.open(img_byteIO)

【讨论】:

    【解决方案2】:

    为了解决这个问题,我需要将我的相机设置为将图像转换为 base64,然后将其上传到服务器。

    在服务器中,我再次对其进行转换,然后根据需要使用它。 Base64 是一组二进制到文本的编码方案,通过将其转换为 radix-64 表示,以 ASCII 字符串格式表示二进制数据。

    因此,您将图像转换为字符串然后发送,这是我发现上传图像的最佳方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-26
      • 2021-02-08
      • 2018-04-13
      • 2017-12-11
      • 1970-01-01
      • 2021-05-13
      • 2018-09-26
      • 2023-03-22
      相关资源
      最近更新 更多