Ошибка при синтаксическом анализе event.body в AWS API Gateway. Лямбда-обработчик nodejs. - PullRequest
0 голосов
/ 06 мая 2019

Существует ли какой-либо стандартный способ анализа содержимого события AWS API в AWS Lambda?

У меня есть функция lambda nodejs (обработчик), подобная этой. Эта функция вызывается интеграцией прокси-сервера AWS API Gateway. Короче говоря, интеграция прокси передает запрос http как есть лямбде.

exports.handler = async(event, context, callback) => {
...
}

Мое мероприятие будет содержать изображения или документы. Другими словами, сейчас, используя Postman, я загружаю контент с помощью метода HTTP Post в URL-адрес AWS API. Затем я хотел бы вызвать загрузку AWS S3 с содержимым.

Как есть, объект события, если мы JSON.stringify, он содержит эти вещи

{
    "resource": "/UploadToS3",
    "path": "/UploadToS3",
    "httpMethod": "POST",
    "headers": {
        "Accept": "*/*",
        "accept-encoding": "gzip, deflate",
        "Cache-Control": "no-cache",
        "Content-Type": "multipart/form-data; boundary=--------------------------286169661413777803563037",
        "Host": "rzm85vjr13.execute-api.us-east-1.amazonaws.com",
        "Postman-Token": "84182d22-7193-480f-8642-0fede39b4458",
        "User-Agent": "PostmanRuntime/7.11.0",
        "X-Amz-Date": "20190506T191534Z",
        "X-Amzn-Trace-Id": "Root=1-5cd087d7-73a9f50e5b2c20a2628852fb",
        "X-Forwarded-For": "100.18.45.29",
        "X-Forwarded-Port": "443",
        "X-Forwarded-Proto": "https"
    },
    "multiValueHeaders": {
        "Accept": [
            "*/*"
        ],
        "accept-encoding": [
            "gzip, deflate"
        ],
        "Cache-Control": [
            "no-cache"
        ],
        "Content-Type": [
            "multipart/form-data; boundary=--------------------------286169661413777803563037"
        ],
        "Host": [
            "rzm85vjr13.execute-api.us-east-1.amazonaws.com"
        ],
        "Postman-Token": [
            "84182d22-7193-480f-8642-0fede39b4458"
        ],
        "User-Agent": [
            "PostmanRuntime/7.11.0"
        ],
        "X-Amz-Date": [
            "20190506T191534Z"
        ],
        "X-Amzn-Trace-Id": [
            "Root=1-5cd087d7-73a9f50e5b2c20a2628852fb"
        ],
        "X-Forwarded-For": [
            "100.18.45.29"
        ],
        "X-Forwarded-Port": [
            "443"
        ],
        "X-Forwarded-Proto": [
            "https"
        ]
    },
    "queryStringParameters": null,
    "multiValueQueryStringParameters": null,
    "pathParameters": null,
    "stageVariables": null,
    "requestContext": {
        "resourceId": "f80gn4",
        "resourcePath": "/UploadToS3",
        "httpMethod": "POST",
        "extendedRequestId": "ZRopnE9AIAMF2ig=",
        "requestTime": "06/May/2019:19:15:35 +0000",
        "path": "/test/UploadToS3",
        "accountId": "364714536632",
        "protocol": "HTTP/1.1",
        "stage": "test",
        "domainPrefix": "rzm85vjr13",
        "requestTimeEpoch": 1557170135135,
        "requestId": "5319988d-7033-11e9-a592-f9fb3565e98f",
        "identity": {
            "cognitoIdentityPoolId": null,
            "accountId": null,
            "cognitoIdentityId": null,
            "caller": null,
            "sourceIp": "100.18.45.29",
            "principalOrgId": null,
            "accessKey": null,
            "cognitoAuthenticationType": null,
            "cognitoAuthenticationProvider": null,
            "userArn": null,
            "userAgent": "PostmanRuntime/7.11.0",
            "user": null
        },
        "domainName": "rzm85vjr13.execute-api.us-east-1.amazonaws.com",
        "apiId": "rzm85vjr13"
    },
    "body": "----------------------------286169661413777803563037\r\nContent-Disposition: form-data; name=\"test\"; filename=\"b002.jpg\"\r\nContent-Type: image/jpeg\r\n\r\n**CONTENT GOES HERE**\r\n",
    "isBase64Encoded": false
}

Если я скажу event.body , это то, что мы получаем. Для краткости я сократил так много данных изображения (все данные изображения находятся между image / jpeg и ---- ).

----------------------------286169661413777803563037
Content-Disposition: form-data; name="test"; filename="b002.jpg"
Content-Type: image/jpeg

����JFIF��C         

----------------------------286169661413777803563037--

Мне нужно каким-то образом разобрать это, чтобы получить содержимое изображения и, возможно, тип. Этот контент выглядит как фрагмент HTTP-запроса. Если я использую этот контент как есть и передаю его в S3.upload, он не подходит для последующего открытия.

У некоторых примеров, которые я видел в Интернете, есть несколько библиотек. Может кто-нибудь объяснить, почему мне понадобятся библиотеки для извлечения контента при необходимости загрузки S3 или для некоторых других функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...