Я установил API-шлюз, который хорошо работает с S3. Он также обрабатывает много специальных символов, таких как space, -, %, etc.
Единственная проблема заключается в именах файлов, включая знак +
.
Попытка отправить файл с именем my+file.txt
.
В API Gateway нет Lambda
. Он настроен только для сопоставления запросов с S3
.
Я тестирую API-шлюз со следующим запросом:
С этим запросом я получаю следующее сообщение об ошибке:
SignatureDoesNotMatch
Рассчитанная нами подпись запроса не соответствует предоставленной вами подписи. Проверьте свой ключ и метод подписи.
Вот соответствующие журналы выполнения запроса API-шлюза:
Thu Oct 17 07:06:56 UTC 2019 : HTTP Method: PUT, Resource Path: /to-device/my%2Bfile.txt
Thu Oct 17 07:06:56 UTC 2019 : Method request path: {bucket=to-device, object=my%2Bfile.txt}
Thu Oct 17 07:06:56 UTC 2019 : Method request query string: {}
Thu Oct 17 07:06:56 UTC 2019 : Method request headers: {}
Thu Oct 17 07:06:56 UTC 2019 : Method request body before transformations:
Thu Oct 17 07:06:57 UTC 2019 : Endpoint request URI: https://****.amazonaws.com/to-device/my+file.txt
Thu Oct 17 07:06:57 UTC 2019 : Endpoint request body after transformations:
Thu Oct 17 07:06:57 UTC 2019 : Sending request to https://****.amazonaws.com/to-device/my+file.txt
Thu Oct 17 07:06:57 UTC 2019 : Received response. Status: 403, Integration latency: 30 ms
Thu Oct 17 07:06:57 UTC 2019 : Endpoint response headers:
{
x-amz-request-id=*,
x-amz-id-2=*,
Content-Type=application/xml,
Transfer-Encoding=chunked,
Date=Thu,
17 Oct 2019 07:06:56 GMT,
Server=AmazonS3
}
Thu Oct 17 07:06:57 UTC 2019 : Endpoint response body before transformations: <?xml version="1.0" encoding="UTF-8"?>
<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><AWSAccessKeyId>
Я думаю, что проблема в том, что API-шлюз декодируетввод и отображение этого декодированного запроса на S3 вместо простого его прохождения.
В чем здесь проблема?
Как я могу отправлять файлы с именем +
в S3?