Я делаю запрос POST
Ajax, который отправляет записанное аудио на AWS Lambda
, что является функцией Python
. Когда я пытаюсь сбросить содержимое event['body']
в S3, я получаю поврежденный аудиофайл .webm
.
Javascript:
...
rec = new MediaRecorder(stream, {mimeType: "audio/webm;codecs=opus"});
...
var http = new XMLHttpRequest();
http.open('POST', 'https://url.execute-api.us-east-1.amazonaws.com/prod/audio', true);
var blob = new Blob(audioChunks, { 'type' : 'audio/webm; codecs=opus' });
http.setRequestHeader('Content-type', 'audio/webm;codecs=opus');
http.send(blob);
Python Lambda:
import json
import boto3
def lambda_handler(event, context):
# TODO implement
print(event)
s3_client = boto3.client('s3', aws_access_key_id='',aws_secret_access_key='')
# filename=
s3_client.put_object(Body=event['body'], Bucket='bucket', Key='incoming/test.webm')
return {
'statusCode': 200,
'headers': {
'Access-Control-Allow-Origin': '*'
},
'body': json.dumps(event)
}
Cloudwatch Logs:
'userAgent': 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36', 'accountId': None, 'caller': None, 'sourceIp': '', 'accessKey': None, 'cognitoAuthenticationProvider': None, 'user': None}, 'domainName': 'aws-api-url', 'apiId': 's5inhs5z22'}, 'body': '\x1aEߣ�B��\x01B��\x01B�\x04B�\x08B��webmB��\x04B��\x02\x18S�g\x01�������\x15I�f�*ױ�\x0fB@M��ChromeWA�Chrome\x16T�k���ׁ\x01sŇ$�O�\x01ӝ��\x02��A_OPUSc��OpusHead\x01\x01\x00\x00��\x00\x00\x00\x00\x00፵�G;�\x00��\x01bd� \x1fC�u\x01��������\x00�A�\x00\x00�������?R~y�r��8��\x17\x0e�J��oy�v\\���ON\x1c\\�f�\rA�\u05f9�~\x1b\'�e�\x12as�8\x11;Q�\n\x10�^,�#\x1cλ�\x1b\x0b���?�`�u�מ�䘸\x0c�ί��J�Y\x12i_O�����+�����E��E�͡�e�\x17ą�nݎ�\x039a�X`Wm��j\x0bu��#�\n�?\x10���c�\x0b!�?
Я не уверен, как обращаться с этим типом данных, Python сохраняет его как строку? Мой звук работает, если я обращаюсь к нему в браузере, используя blob:https://s3url.com/some-string