鑑於您在settings.MYMODEL_FILES_LOCATION中定義了存儲桶位置,您可以使用以下命令將上傳的文件重命名爲任意位置,可能源自原始文件名。以下片段將把文件保存在/ mymodelfiles /中。模型實例屬性可以通過重命名方法中的實例對象訪問,因此您可以在相同的子目錄下從同一用戶上傳文件。
import uuid
import os
from django.utils.deconstruct import deconstructible
from storages.backends.s3boto import S3BotoStorage
from django.db import models
from django.conf import settings
def path_and_rename(prefix, filename):
ext = filename.split('.')[-1]
filename = '{}.{}'.format(uuid.uuid4().hex, ext)
return os.path.join(prefix, filename)
def get_path_for_my_model_file(instance, filename):
return path_and_rename('mymodelfiles/', filename)
@deconstructible
class MyS3BotoStorage(S3BotoStorage):
pass
class MyModel(models.Model):
resources = models.FileField(
upload_to=get_path_for_my_model_file,
storage=MyS3BotoStorage(bucket=settings.MYMODEL_FILES_LOCATION))
S3BotoStorage的構造函數可以通過關鍵字參數「acl」來設置上傳文件的權限,例如, acl ='private'
顯示您說的「不工作」的代碼。 – mootmoot