比较来自世界各地的卖家的域名和 IT 服务价格

Django存储带有多个桶 S3

我用 AWS, 我的申请中会有不同的桶。 我也使用 Django-Storages. 有没有办法指定我想要上传文件的桶 /例如,作为函数中的参数 Save// 或者是其他东西?/

我看到了这个
https://coderoad.ru/9430770/
, 但我不明白如何使用它?!
已邀请:

冰洋

赞同来自:

S3BotoStorage

将篮子的名称作为参数。 如果未指定,则将使用参数。
AWS_STORAGE_BUCKET_NAME

. 这意味着,如果你想做
S3BotoStorage

默认存储后端
DEFAULT_FILE_STORAGE

, 它应该使用默认存储桶。

但是,您还可以在字段级别分配存储:


from django.db import models
from storages.backends.s3boto import S3BotoStorage

class MyModel/models.Model/:
file_1 = models.FileField// # Uses default storage
file_2 = models.FileField/storage=S3BotoStorage/bucket='other-bucket'//


编辑

:

评论失控,所以我会更新我的答案。 更改基于实例的存储设施的副本的参数不是为其开发的存储库 Django API. 存储器的服务器部分没有模型的知识实例,因为存储可以在模型的上下文之外使用,例如用静态文件。 不太不合理,但这不是旨在解决的使用 Django 或者 django-storages. 我不希望你在一个储存的存储中找到一个会对你来说。

文档描述了如何手动管理文件:
https://docs.djangoproject.com ... jects
至少您需要存储保存文件的存储桶,以便在提示模型时稍后会找到它。

詹大官人

赞同来自:

另一个解决方案如果要在运行时指定存储桶,则可以在调用该方法之前执行此操作 save// 在模型中。

遵循上面的例子:


from django.db import models
from storages.backends.s3boto import S3BotoStorage

class MyModel/models.Model/:
file_1 = models.FileField// # Uses default storage
file_2 = models.FileField//


在表示中,在保存模型时,您可以在此字段中指定存储。


my_file_model = MyModel//
my_file_model.file_2.storage = S3BotoStorage/bucket="your-bucket-name"/
my_file_model.save//


通过这种方式, file_2 将保存在您指定的桶中,在哪里 file_1 将使用默认存储桶。

窦买办

赞同来自:

只是提到另一个篮子名字 settings.py 和

PRIVATE_BUCKET_NAME

='bucket name'.

创建重新定义的用户类 S3BotoStorage 并且可以序列化为迁移文件。

为类创建一个对象
s3_storage = S3MediaStorage//

并将其转移到现场存储 file1 在 MyModel


from storages.backends.s3boto import S3BotoStorage
from django.conf import settings

@deconstructible
class S3MediaStorage/S3BotoStorage/:
def __init__/self, *args, **kwargs/:
kwargs['bucket'] = getattr/settings, 'PRIVATE_BUCKET_NAME'/
super/S3MediaStorage, self/.__init__/*args, **kwargs/

s3_storage = S3MediaStorage//

class MyModel/models.Model/:
file = models.FileField//
file1 = models.FileField/storage=s3_storage/

要回复问题请先登录注册