BOTO3 - generate_presigned_url для `put_object` return` Рассчитанная нами подпись запроса не соответствует предоставленной вами подписи` - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь создать предопределенный URL, который поможет некоторым клиентам загружать файлы.Вот мой тестовый скрипт, который в настоящее время работает

# Get the service client.
s3 = boto3.client('s3')
boto3.set_stream_logger(name='botocore')

# Generate the URL to get 'key-name' from 'bucket-name'
url = s3.generate_presigned_url(
    ClientMethod='put_object',
    Params={
        'Bucket': s3_bucket_name,
        'Key': test_key,
    }    
)

files = StringIO("asdfasdfasdf")
response = requests.put(url, data=files)

print(str(response.content))

Но если я добавлю:

`ACL': 'public-read' 

к Params (или добавьте некоторые метаданные, следуя информации в документация по put_object Я получаю обратно с сервера:

The request signature we calculated does not match the signature you provided. Check your key and signing method.

Я также открыл вопрос по BOTO3: https://github.com/boto/boto3/issues/1722

1 Ответ

0 голосов
/ 03 октября 2018

Это рассматривается в выпуске github https://github.com/boto/boto3/issues/934

Для загрузки объекта вам следует использовать generate_presigned_post .Есть несколько параметров, которые нельзя встроить в URL, и они возвращаются вам этим методом.

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