签名不一致DoesNotMatch Amazon S3与django-pipeline,s3boto和存储

发布于 2021-01-29 17:42:50

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

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

关注者
0
被浏览
49
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我也发生了……花了几个小时才找到,但最终我发现了。事实证明,如果正确的签名是:

    ssCNsAOxLf5vA80ldAI3M0CU2%2Bw =

    然后,AWS将不接受:

    ssCNsAOxLf5vA80ldAI3M0CU2 + w =

    唯一的区别是%2B转换为“ +”。

    S3BotoStorage实际上可以正确产生它,但是编码发生在url方法(return unquote(final_url))的最后一行中的CachedFilesMixin上。为了解决这个问题,我派生了一个新的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))
    

    希望这可以帮助…



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看