Search code examples
pythondjangoamazon-s3botodjango-storage

Why does S3 (using with boto and django-storages) give signed url even for public files?


This is strange. I have mix of public as well as private files. I want normal urls in public files, and signed urls in private files.

I tried to change AWS_QUERYSTRING_AUTH to False as I see by default, it's True in django-storages.

But, when I change it, my private files url is not signed (thus not accessible).

May be I am missing something here. What can be solution?

Thanks in advance.


Solution

  • AWS_QUERYSTRING_AUTH sets the default behavior, but you can override it when you create an instance of S3BotoStorage, by passing in an additional argument to the initializer:

    S3BotoStorage(bucket="foo", querystring_auth=False)
    

    So if you have one bucket private and another bucket public, you can set the querystring_auth argument appropriately and get your desired behavior.