gpt4 book ai didi

python - 如何从 multipart/form-data 请求中提取二进制数据? (Python)(由 AWS API Gateway 编码的多部分请求 base64)

转载 作者:行者123 更新时间:2023-12-05 01:34:57 24 4
gpt4 key购买 nike

我的 python 3 lambda 函数从 api 网关接收到以下事件(正文是 base64 编码的):-

event = {"resource":"/upload","path":"/upload","httpMethod":"POST","headers":{"accept":"*/*","accept-encoding":"gzip, deflate, br","accept-language":"en-US,en;q=0.9","content-type":"multipart/form-data; boundary=----WebKitFormBoundary1Amo2IuBc9PdBoS0","Host":"txx5ugl783.execute-api.ap-south-1.amazonaws.com","origin":"http://127.0.0.1:5500","referer":"http://127.0.0.1:5500/index.html","sec-fetch-dest":"empty","sec-fetch-mode":"cors","sec-fetch-site":"cross-site","User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36 Edg/84.0.522.58","X-Amzn-Trace-Id":"Root=1-5f367cec-1d96a95fdd51ba8831fb718e","X-Forwarded-For":"223.226.79.62","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},"multiValueHeaders":{"accept":["*/*"],"accept-encoding":["gzip, deflate, br"],"accept-language":["en-US,en;q=0.9"],"content-type":["multipart/form-data; boundary=----WebKitFormBoundary1Amo2IuBc9PdBoS0"],"Host":["txx5ugl783.execute-api.ap-south-1.amazonaws.com"],"origin":["http://127.0.0.1:5500"],"referer":["http://127.0.0.1:5500/index.html"],"sec-fetch-dest":["empty"],"sec-fetch-mode":["cors"],"sec-fetch-site":["cross-site"],"User-Agent":["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36 Edg/84.0.522.58"],"X-Amzn-Trace-Id":["Root=1-5f367cec-1d96a95fdd51ba8831fb718e"],"X-Forwarded-For":["223.226.79.62"],"X-Forwarded-Port":["443"],"X-Forwarded-Proto":["https"]},"queryStringParameters":None,"multiValueQueryStringParameters":None,"pathParameters":None,"stageVariables":None,"requestContext":{"resourceId":"fdi0bs","resourcePath":"/upload","httpMethod":"POST","extendedRequestId":"RQh06FwxBcwFuyw=","requestTime":"14/Aug/2020:12:00:44 +0000","path":"/test/upload","accountId":"981394008632","protocol":"HTTP/1.1","stage":"test","domainPrefix":"txx5ugl783","requestTimeEpoch":1597406444179,"requestId":"7060c4c5-de34-494a-9abd-3de8ae9bc624","identity":{"cognitoIdentityPoolId":None,"accountId":None,"cognitoIdentityId":None,"caller":None,"sourceIp":"223.226.79.62","principalOrgId":None,"accessKey":None,"cognitoAuthenticationType":None,"cognitoAuthenticationProvider":None,"userArn":None,"userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36 Edg/84.0.522.58","user":None},"domainName":"txx5ugl783.execute-api.ap-south-1.amazonaws.com","apiId":"txx5ugl783"},"body":"LS0tLS0tV2ViS2l0Rm9ybUJvdW5kYXJ5MUFtbzJJdUJjOVBkQm9TMA0KQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJ1cGxvYWRfZmlsZXBhdGgiOyBmaWxlbmFtZT0iaW1nMDAxICgzKS5qcGciDQpDb250ZW50LVR5cGU6IGltYWdlL2pwZWcNCg0K/9j/4AAQSkZJRgABAQEBLAEsAAD/4RyyRXhpZgAATU0AKgAAAAgABgALAAIAAAAmAAAIYgESAAMAAAABAAEAAAExAAIAAAAmAAAIiAEyAAIAAAAUAAAIrodpAAQAAAABAAAIwuocAAcAAAgMAAAAVgAAEUYc6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFdpbmRvd3MgUGhvdG8gRWRpdG9yIDEwLjAuMTAwMTEuMTYzODQAV2luZG93cyBQaG90byBFZGl0b3IgMTAuMC4xMDAxMS4xNjM4NAAyMDIwOjA0OjA5IDE2OjQ0OjMwAAAGkAMAAgAAABQAABEckAQAAgAAABQAABEwkpEAAgAAAAMwMAAAkpIAAgAAAAMwMAAAoAEAAwAAAAEAAQAA6hwABwAACAwAAAkQAAAAABzqAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI\"data removed\"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","isBase64Encoded":True}

我提交了一个带有图像和 json 字符串的表单作为 multipart/form-data POST 请求。我使用以下代码在服务器端处理它:-

from requests_toolbelt.multipart import decoder
content_type_header = event['headers']['content-type']
postdata = base64.b64decode(event['body']).decode('iso-8859-1')
head = []
cont = []
for part in decoder.MultipartDecoder(postdata.encode('utf-8'), content_type_header).parts:
head.append(part.headers)
cont.append(part.content) # content in binary format
print("\nJSON Part:-")
print(head[1])
print(cont[1])
print("\n")
print("File Part:-")
print(head[0])
print(cont[0])
print("\n")

with open("t.jpg", 'wb') as w:
w.write(cont[0])

输出:-

JSON Part:-
{b'Content-Disposition': b'form-data; name="upload_json_string"'}
b'{ "data": "test"}'


File Part:-
{b'Content-Disposition': b'form-data; name="upload_filepath"; filename="img001 (3).jpg"', b'Content-Type': b'image/jpeg'}
b'\xc3\xbf\xc3\x98\xc3\xbf\xc3\xa0\x00\x10JFIF\x00\x01\x01\x01\x01,\x01,\x00\x00\xc3\xbf\xc3\xa1\x1c\xc2\xb2Exif\x00\x00MM\x00*\x00\x00\x00\x08\x00\x06\x00\x0b\x00\x02\x00\x00\x00&\x00\x00\x08b\x01\x12\x00\x03\x00\x00\x00\x01\x00\x01\x00\x00\x011\x00\x02\x00\x00\x00&\x00\x00\x08\xc2\x88\x012\x00\x02\x00\x00\x00\x14\x00\x00\x08\xc2\xae\xc2\x87i\x00\x04\x00\x00\x00\x01\x00\x00\x08\xc3\x82\xc3\xaa\x1c\x00\x07\x00\x00\x0

但输出 t.jpg(34kb) 不可读(已损坏)并且比原始文件 (29kb) 大。我在哪里犯了错误?如何正确提取上传的文件(二进制数据)?

最佳答案

好吧,我明白了。这是由于不同的编码和解码。我用 iso-8859-1 解码但用 utf-8 编码,这可能会导致二进制数据错误,但不会导致文本数据错误。此外,这个额外的解码和编码步骤不是必需的,可以删除。然后我能够重现确切的文件。

postdata = base64.b64decode(event['body'])

decoder.MultipartDecoder(postdata, content_type_header).parts

有了这个,我们就有了由 javascript 客户端(或任何客户端)发送的 multipart/form-data 请求的代码,由 AWS 转换为 base64 并由 python 后端处理。干杯。

关于python - 如何从 multipart/form-data 请求中提取二进制数据? (Python)(由 AWS API Gateway 编码的多部分请求 base64),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63412874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com