Inconsistent SignatureDoesNotMatch Amazon S3 with django-pipeline, s3boto and storages

前端 未结 5 1211
萌比男神i
萌比男神i 2020-12-10 09:08

I have 2 files compiled by django-pipeline along with s3boto: master.css and master.js. They are set to \"Public\" in my buckets. However, when I access them, sometimes mast

5条回答
  •  感情败类
    2020-12-10 09:56

    This article on Flask is a good resource on getting your signatures right: https://devcenter.heroku.com/articles/s3-upload-python

    @app.route('/sign_s3/')
    def sign_s3():
        AWS_ACCESS_KEY = os.environ.get('AWS_ACCESS_KEY_ID')       
        AWS_SECRET_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
        S3_BUCKET = os.environ.get('S3_BUCKET')
    
        object_name = request.args.get('s3_object_name')
        mime_type = request.args.get('s3_object_type')
    
        expires = int(time.time()+10)
        amz_headers = "x-amz-acl:public-read"
    
        put_request = "PUT\n\n%s\n%d\n%s\n/%s/%s" % (mime_type, expires, amz_headers, S3_BUCKET, object_name)
    
        signature = base64.encodestring(hmac.new(AWS_SECRET_KEY,put_request, sha).digest())
        signature = urllib.quote_plus(signature.strip())
    
        url = 'https://%s.s3.amazonaws.com/%s' % (S3_BUCKET, object_name)
    
        return json.dumps({
            'signed_request': '%s?AWSAccessKeyId=%s&Expires=%d&Signature=%s' % (url, AWS_ACCESS_KEY, expires, signature),
             'url': url
        })
    

提交回复
热议问题