AWS S3将参数添加到签名的URL

问题描述

我使用django-storages将静态文件和私有文件存储在s3存储桶中。

对于一些文件,我需要在url中传递参数,因为所请求的html文件会使用这些参数生成动态内容

例如:

https://example-static-bucket.s3.amazonaws.com/static/header.html?name=Example&site=2

使用静态文件效果很好。

但是,如果我使用django-storages获取私有文件的签名URL并添加参数,则会出现错误

<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
...
</Error>

如何使用django-storages将参数添加到已签名的url中?

解决方法

S3存储静态对象,您不能使用签名的URL对其进行修改。可以将S3对象视为文件系统中的文件:它们具有路径和名称,您可以获取其内容,但是它们是用于数据的哑容器。

类似地,您不能让static / header.html基于调用的参数而变得不同。您可以上传文件,也可以下载文件。