Загрузка файла со специальным символом (+) на S3 через API-шлюз - PullRequest
0 голосов
/ 17 октября 2019

Я установил API-шлюз, который хорошо работает с S3. Он также обрабатывает много специальных символов, таких как space, -, %, etc.

Единственная проблема заключается в именах файлов, включая знак +.

Попытка отправить файл с именем my+file.txt.

В API Gateway нет Lambda. Он настроен только для сопоставления запросов с S3.


Я тестирую API-шлюз со следующим запросом:

request test

С этим запросом я получаю следующее сообщение об ошибке:

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?

1 Ответ

0 голосов
/ 17 октября 2019

В этом случае вам необходимо кодировать url + знак будет кодироваться с% 2B. Когда вы будете декодировать, вы получите +.

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