我已经设置了AWS Lambda。
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': json.dumps(event)
}
我想POST
进入PDF文件,以便可以在lambda函数中对其进行操作。
这是我的POST
代码
import requests
headers = {
'X-API-KEY':'1234',
'Content-type': 'multipart/form-data'}
files = {
'document': open('my.pdf', 'rb')
}
r = requests.post(url, files=files, headers=headers)
display(r)
display(r.text)
我遇到了错误:
<Response [400]>
'{"message": "Could not parse request body into json: Unexpected character (\\\'-\\\' (code 45)) in numeric value: expected digit (0-9) to follow minus sign, for valid numeric value
我如何POST
翻阅我的PDF并能够正确发送我的PDF并在Lambda中进行访问?
注意:
如果我这样做,我会成功:
payload = '{"key1": "val1","key2": 22,"key3": 15,"key4": "val4"}'
r = requests.post(url = URL, data=payload, headers=HEADERS)
这只是我无法获得的PDF部分
答案 0 :(得分:1)
我知道了。花了我很多时间,但我想我明白了。本质上,所有内容都是关于字节的编码和解码。完全不必触摸API网关。
请求:
HEADERS = {'X-API-KEY': '12345'}
data = '{"body" : "%s"}' % base64.b64encode(open(path, 'rb').read())
r = requests.post(url, data=data, headers=HEADERS)
在lambda中
from io import BytesIO
def lambda_handler(event, context):
pdf64 = event["body"]
# Need this line as it does 'b'b'pdfdatacontent'.
pdf64 = pdf64[2:].encode('utf-8')
buffer = BytesIO()
content = base64.b64decode(pdf64)
buffer.write(content)
答案 1 :(得分:1)
我发现这对我来说效果很好:
import requests
file_loc = 'path/to/test.pdf'
data = open(file_loc,'rb').read() #this is a bytes object
r = requests.post(url, data=data)
r.ok #returns True (also a good idea to check r.text
#one-liner
requests.post(url, data=open(file_loc,'rb').read())
import io, base64
body = event["body"]
attachment = base64.b64decode(body.encode()) #this is a bytes object
buff = io.BytesIO(attachment) #this is now useable - read/write etc.
#one-liner
buff = io.BytesIO(base64.b64decode(event["body"].encode()))
不太清楚为什么,但对我来说,原始请求中的 base64 编码(即使使用 urlsafe)损坏了文件,并且它在 Lambda 中不再被识别为 PDF,因此 OP 的答案对我不起作用。>