我有一个带有post
方法的Lambda函数,该函数应该能够将图像作为多格式数据接收、加载图像、执行一些计算并返回一个简单的数字数组。Lambda函数位于API网关后面,Lambda-Proxy集成上,multipart/form-data
设置为二进制媒体类型。
from requests_toolbelt.multipart import decoder
multipart_string = base64.b64decode(body)
content_type = data['event']['headers']['Content-Type']
multipart_data = decoder.MultipartDecoder(multipart_string, content_type)
其中content_type
是'multipart/form-data;boundary=---------------881952313555430391739156'
。
像这样运行multipart_data
的组件。
for part in multipart_data.parts:
print(part.content)
print(part.headers)
给了这个。内容(太长无法发布)如下所示:
b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\ ... x00\x7f\xff\xd9'
{b'Content-Disposition': b'form-data; name="image"; filename="8281460-3x2-700x467.jpg"', b'Content-Type': b'image/jpeg'}
import json
from flask import Flask, request
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def hello(event, context):
response = {
"statusCode": 200,
"event": event
}
return {
"body": json.dumps(response),
}
下面是Python代码形式的邮递员请求:
import requests
url = "url-to-lambda-function"
payload = "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"image\"; filename=\"8281460-3x2-700x467.jpg\"\r\nContent-Type: image/jpeg\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--"
headers = {
'content-type': "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW",
'User-Agent': "PostmanRuntime/7.18.0",
'Accept': "*/*",
'Cache-Control': "no-cache",
'Content-Type': "multipart/form-data; boundary=--------------------------881952313555430391739156",
'Accept-Encoding': "gzip, deflate",
'Content-Length': "30417",
'Connection': "keep-alive",
'cache-control': "no-cache"
}
response = requests.request("POST", url, data=payload, headers=headers)
print(response.text)
对于任何来到这里的人来说,这就是我最终解决它的方式:
body = event["body"]
content_type = event["headers"]["Content-Type"]
body_dec = base64.b64decode(body)
multipart_data = decoder.MultipartDecoder(body_dec, content_type)
binary_content = []
for part in multipart_data.parts:
binary_content.append(part.content)
imageStream = io.BytesIO(binary_content[0])
imageFile = Image.open(imageStream)
imageArray = np.array(imageFile)
这将产生一个您可以使用的数组,因为对于我来说,困难在于理解多部分/表单数据是如何再次拼接在一起的。
问题内容: 我正在为Firefox / IE构建一个开放式搜索附加组件,并且该图像需要经过Base64编码,因此如何对我拥有的收藏夹图标进行64位编码? 我只熟悉PHP 问题答案: 据我记得,图像数据有一个xml元素。您可以使用此网站对文件进行编码(使用上载字段)。然后,只需将数据复制并粘贴到XML元素即可。 您也可以这样使用PHP来做到这一点: 使用Mozilla指南获取有关创建OpenSear
问题内容: 我目前正在从画布上获取像这样的base64图像数据URL(不是dataURL我只是为了显示字符串的样子) 我需要解码该图像以检查图像的宽度和高度 但是我在尝试解码配置时收到错误 因此,是的,我制作dataurl的方式一定是错误的,但无法弄清楚该怎么做。我也尝试传递完整的dataurl(with data:image …)仍然没有成功 问题答案: 您所拥有的是数据URI方案,有关如何对其
我有一个编码为base64的SVG文件,我想用ImageView显示图像。这是我尝试过的: 但是decodedByte总是返回null。 附注: 此代码适用于jpeg图像。 如果Bas64字符串包含Bas64前缀("data: Image/svg xml; Bas64,"或"data: Image/jpeg; Bas64,),则decdedByte也总是返回null Bas64字符串是正确的(它在
问题内容: 我一直在尝试处理将发布到nodeJS(和express框架)的图像保存到数据库中,并且遇到了一些麻烦。忽略所有的Web处理,我认为我已经将问题缩小到节点中base64编码发生的方式。我认为下面简化的示例应该可以工作,但是输出图像始终会损坏。 示例(1)在图像中加载(2)保存if()的副本,以确认节点可以正确读取文件。这始终有效。(3)拍摄图像,并对其内容进行base64编码,(4)然后
我想采取一个当前的base64编码的图像,并使用一个简短的哈希说“84dskh”,以“加密”的图像到另一个完全有效的base64编码图像。 原始图像不必经过base64编码,最终我想要原始图像的加密图像,但它仍然是一个可以在img标记中显示的有效图像:。 最好使用JavaScript。
介绍 Base64编码是用64(2的6次方)个ASCII字符来表示256(2的8次方)个ASCII字符,也就是三位二进制数组经过编码后变为四位的ASCII字符显示,长度比原来增加1/3。 使用 String a = "伦家是一个非常长的字符串"; //5Lym5a625piv5LiA5Liq6Z2e5bi46ZW/55qE5a2X56ym5Liy String encode = Base64.en