DigitalOcean Spaces 中“我们计算的请求签名与您提供的签名不匹配”

问题描述 投票:0回答:1

我的 django 应用程序将用户上传的文件保存到 DigitalOcean Spaces 中的 s3 存储桶中(使用 django-storages[s3],基于 amazon-s3),并且文件的路径保存在我的数据库中。但是,当我单击数据库中的 url 时,它会将我带到一个包含此错误的页面:

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

例如,实际的 url 看起来像这样:

https://my-spaces.nyc3.digitaloceanspaces.com/media/uploads/Recording_2.mp3?AWSAccessKeyId=DO009ABCDEFGH&Signature=Y9tn%2FTZa6sVlGGZSU77tA%3D&Expires=1604202599
。理想情况下,保存的网址应该是
https://my-spaces.nyc3.digitaloceanspaces.com/media/uploads/Recording_2.mp3

这实际上也会影响我项目的其他部分,因为稍后将使用

requests
访问该 url,但由于此错误,我得到
status [402]

我的settings.py是这样的:

AWS_ACCESS_KEY_ID = 'DO009ABCDEFGH'
AWS_SECRET_ACCESS_KEY = 'Nsecret_key'
AWS_STORAGE_BUCKET_NAME = 'bucket_name'
AWS_DEFAULT_ACL = 'public-read'
AWS_S3_ENDPOINT_URL = 'https://transcribe-spaces.nyc3.digitaloceanspaces.com/'
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400'
}

AWS_MEDIA_LOCATION = 'media/'
PUBLIC_MEDIA_LOCATION = 'media/'
MEDIA_URL = '%s%s' % (AWS_S3_ENDPOINT_URL, AWS_MEDIA_LOCATION)
DEFAULT_FILE_STORAGE = 'mysite.storage_backends.MediaStorage'

保存的 URL 包含访问密钥、用于将文件写入存储桶的签名以及超时。我希望当文件的 url 保存在数据库中时,所有这些都不存在。我尝试编辑

MEDIA_URL
AWS_STORAGE_BUCKET_NAME
和其他设置,但它们要么导致错误破坏应用程序,要么根本不执行任何操作。

python django amazon-s3 digital-ocean
1个回答
0
投票

这应该有帮助,

AWS_ACCESS_KEY_ID = ''
AWS_SECRET_ACCESS_KEY = ''
AWS_STORAGE_BUCKET_NAME = 'space_name'
AWS_DEFAULT_ACL = 'public-read'
AWS_S3_ENDPOINT_URL = 'nyc3.digitaloceanspaces.com'
AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=31536000'}
AWS_S3_CUSTOM_DOMAIN = 'transcribe-spaces.nyc3.digitaloceanspaces.com'

PUBLIC_MEDIA_LOCATION = 'media'
MEDIA_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/{PUBLIC_MEDIA_LOCATION}/'
DEFAULT_FILE_STORAGE = 'mysite.storage_backends.PublicMediaStorage'

数字海洋空间

© www.soinside.com 2019 - 2024. All rights reserved.