I'm trying to create a presigned url that will help some customers to upload files . Here my test script that is currently working
# 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))
But if I'm adding:
`ACL': 'public-read'
to Params
(or add some metadata following the information in the put_object documentation I receive back from the server:
The request signature we calculated does not match the signature you provided. Check your key and signing method.
I've open also a issue on BOTO3: https://github.com/boto/boto3/issues/1722
This is covered in the github issue https://github.com/boto/boto3/issues/934
For uploading an object, you should use generate_presigned_post. There are several parameters that cannot be embedded within the url, and those are returned to you by that method.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With