python - 不一致的 SignatureDoesNotMatch Amazon S3 与 django-pipeline、s3boto 和存储

标签 python django amazon-s3 boto django-storage

我有 2 个由 django-pipeline 和 s3boto 编译的文件:master.css 和 master.js。它们在我的存储桶中设置为“公开”。但是,当我访问它们时,有时会提供 master.css,有时会出现 SignatureDoesNotMatch 错误。与 master.js 相同。这不会发生在 Chrome 上。我可能缺少什么?

编辑:它现在也发生在 Chrome 上。

最佳答案

我也遇到过... 花了几个小时才找到,但我最终弄明白了。 事实证明,如果正确的签名是:

ssCNsAOxLf5vA80ldAI3M0CU2%2Bw=

那么 AWS 将不接受:

ssCNsAOxLf5vA80ldAI3M0CU2+w=

唯一的区别是将 %2B 翻译成“+”。

S3BotoStorage 实际上会正确生成它,但编码发生在 url 方法的最后一行中的 CachedFilesMixin 上(return unquote(final_url))。 为了修复它,我派生了一个新的 CachedFilesMixin 来撤消“损坏”(我应该提到我不知道为什么这个反引号首先存在,所以撤消它可能会导致其他问题)

class MyCachedFilesMixin(CachedFilesMixin):
def url(self, *a, **kw):
    s = super(MyCachedFilesMixin, self).url(*a, **kw)
    if isinstance(s, unicode):
        s = s.encode('utf-8', 'ignore')
    scheme, netloc, path, qs, anchor = urlparse.urlsplit(s)
    path = urllib.quote(path, '/%')
    qs = urllib.quote_plus(qs, ':&=')
    return urlparse.urlunsplit((scheme, netloc, path, qs, anchor))

我在哪里使用我找到的代码 here .

希望这有助于...

关于python - 不一致的 SignatureDoesNotMatch Amazon S3 与 django-pipeline、s3boto 和存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11820566/

相关文章:

python - python中具有继承的动态类

python - Scipy 频谱图与 Matlab 频谱图

python - 这个 bash 脚本不工作 - Linux/Python

python - Django django-extensions 命令不可用( graph_models )

ajax - 如何确保托管在 S3 上的 ajax 内容被编入索引?

python - 单元测试二进制文件输出

python - 用于过滤和检查该模型中是否存在相关数据的 Django 模板语法/标签

javascript - 当我尝试从表单更新时出现白色错误屏幕

amazon-s3 - 文件夹不会在 Amazon S3 上删除

amazon-web-services - AWS CLI S3 存储桶到存储桶的复制?