![](/img/trans.png)
[英]collecstatic modified files using s3boto and django-storages
[英]Why does S3 (using with boto and django-storages) give signed url even for public files?
這很奇怪。 我混合了公共文件和私人文件。 我想要公共文件中的普通網址,以及私人文件中的簽名網址。
我試圖將AWS_QUERYSTRING_AUTH to False
,正如我默認看到的那樣,它在 django-storages 中是 True。
但是,當我更改它時,我的私人文件 url 未簽名(因此無法訪問)。
可能是我在這里遺漏了什么。 有什么辦法可以解決?
提前致謝。
AWS_QUERYSTRING_AUTH
設置默認行為,但您可以在創建S3BotoStorage
實例時通過將其他參數傳遞給初始化程序來覆蓋它:
S3BotoStorage(bucket="foo", querystring_auth=False)
因此,如果您有一個專用存儲桶和另一個存儲桶,則可以適當地設置querystring_auth
參數並獲得所需的行為。
把它放在您的settings.py
AWS_QUERYSTRING_AUTH = False
解決此問題的另一種方法是在您的設置中設置AWS_S3_CUSTOM_DOMAIN。 @see: https : //github.com/jschneier/django-storages/blob/master/storages/backends/s3boto.py#L478
(用boto == 2.38.0和django-storages-redux == 1.3測試)
您可以為單獨的文件夾、目錄創建單獨的存儲類型,並在那里管理訪問權限。
使用 Django - 創建一個可以調用“storage_aws.py”的文件並添加以下內容:
from storages.backends.s3boto3 import S3Boto3Storage
class PublicMediaStorage(S3Boto3Storage):
location = 'media/location2/public'
default_acl = 'public-read'
file_overwrite = False
querystring_auth=False
class PrivateMediaStorage(S3Boto3Storage):
location = 'media/location1/private'
default_acl = 'private'
file_overwrite = False
custom_domain = False
querystring_auth=True
使用 default_acl 定義訪問權限(公共或私有) 使用位置定義位置 - (您可以指定路徑)像
location1 = 'media/location1/private'
location2 = 'media/location2/public'
*注意 querystring_auth=False 或 True
然后當你定義你的model時,你可以指定哪個位置使用哪個model
from django.db import models
from appname.storage_aws import PublicMediaStorage, PrivateMediaStorage
class Upload(models.Model):
file = models.FileField(storage=PublicMediaStorage())
class UploadPrivate(models.Model):
file = models.FileField(storage=PrivateMediaStorage())
私有文件將具有查詢字符串,而公共文件則不會,如“storage_aws.py”文件中所定義
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.