Django REST框架,设置Django Storages/S3 Boto以将一些媒体文件存储到bucket,将一些媒体文件存储到本地存储

Django REST框架,设置Django Storages/S3 Boto以将一些媒体文件存储到bucket,将一些媒体文件存储到本地存储,django,django-rest-framework,Django,Django Rest Framework,我已设置Django Storages/S3 Boto,将用户上传的文件保存到S3存储桶,设置如下: # AWS Bucket access keys AWS_ACCESS_KEY_ID = 'id' AWS_SECRET_ACCESS_KEY = 'key' # AWS Bucket config stuff DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' AWS_STORAGE_BUCKET_NAME =

我已设置Django Storages/S3 Boto,将用户上传的文件保存到S3存储桶,设置如下:

# AWS Bucket access keys
AWS_ACCESS_KEY_ID = 'id'
AWS_SECRET_ACCESS_KEY = 'key'

# AWS Bucket config stuff
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_STORAGE_BUCKET_NAME = 'bucketname'
AWS_S3_REGION_NAME = 'us-east-1'
AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com/'
AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=86400'}

# Media file location
MEDIA_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/'
如何修改存储设置/配置,以便将一些用户上传的文件保存到此S3存储桶,同时将一些其他文件保存到本地文件系统?

当前,我的文件字段如下所示:

class File(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    email = models.EmailField(default='email@email.com')
    file = models.FileField(upload_to=upload_path)

    def __str__(self):
        return self.email + '-' + self.file.name
def upload_path(instance, filename):
    return instance.email + '/' + filename
我的“上传路径”如下所示:

class File(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    email = models.EmailField(default='email@email.com')
    file = models.FileField(upload_to=upload_path)

    def __str__(self):
        return self.email + '-' + self.file.name
def upload_path(instance, filename):
    return instance.email + '/' + filename
Storages只是将“路径”部分保存在数据库字段中。其余部分是根据字段的“存储”类(以代码表示)确定的。要做一些不同的事情,但仍然使用打包的,您需要编写自己的存储后端,它使用s3和文件存储,并使用自定义格式将路径保存为数据库中的路径,以告诉自己在读取文件时使用哪一个,所有对包s3/文件类的代理调用。这在技术上都是可能的,但很困难,而且绝大多数情况下都不是为了这样工作而设计的。存储只是将“路径”部分保存在数据库字段中。其余部分是根据字段的“存储”类(以代码表示)确定的。要做一些不同的事情,但仍然使用打包的,您需要编写自己的存储后端,它使用s3和文件存储,并使用自定义格式将路径保存为数据库中的路径,以告诉自己在读取文件时使用哪一个,所有对包s3/文件类的代理调用。这在技术上都是可能的,但很困难,而且最明显的是,它不是为这样工作而设计的。