Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django aws S3动态定义上传文件路径和文件_Python_Django_Amazon Web Services_Amazon S3_Path - Fatal编程技术网

Python django aws S3动态定义上传文件路径和文件

Python django aws S3动态定义上传文件路径和文件,python,django,amazon-web-services,amazon-s3,path,Python,Django,Amazon Web Services,Amazon S3,Path,在我的Django应用程序中, 我想在保存到AWS S3时动态定义上传路径和文件。到目前为止,我能够直接将文件保存到S3,但是,我想自行设置路径和文件名 例如,上传时,我希望它位于S3路径 bucketname\employeeid\file\u randomnumber.png 我怎么能做这样的事 以下是我的代码: 从storages.backends.s3boto3导入s3boto3存储 class MediaStorage(S3Boto3Storage): location =

在我的Django应用程序中, 我想在保存到AWS S3时动态定义上传路径和文件。到目前为止,我能够直接将文件保存到S3,但是,我想自行设置路径和文件名

例如,上传时,我希望它位于S3路径 bucketname\employeeid\file\u randomnumber.png

我怎么能做这样的事

以下是我的代码:

从storages.backends.s3boto3导入s3boto3存储

class MediaStorage(S3Boto3Storage):
    location = 'media/yy'
    file_overwrite = False

我基于django aws S3解决方案。

您可以覆盖存储
get\u available\u name
方法

这里有一个例子。修改以获得所需的确切文件名方案

class MediaStorage(S3Boto3Storage):
    location = 'media/yy'
    file_overwrite = False

    def get_available_name(self, name, max_length=None):
        custom_name = f'/employeeid/{name}_randomnumber.png'
        return super().get_available_name(custom_name, max_length)

文档:

谢谢,我不知道如何使用这个。我知道get_available_名称来自模型的参数。但是我如何从API传递这些信息呢?例如,在上传文件时,我希望通过api定义员工id目录并为文件创建一个随机名称。
AWS_ACCESS_KEY_ID = config('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = config('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = config('AWS_STORAGE_BUCKET_NAME')
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}

DEFAULT_FILE_STORAGE = 'railercomapp.storage_backends.MediaStorage'
class MediaStorage(S3Boto3Storage):
    location = 'media/yy'
    file_overwrite = False
class MediaStorage(S3Boto3Storage):
    location = 'media/yy'
    file_overwrite = False

    def get_available_name(self, name, max_length=None):
        custom_name = f'/employeeid/{name}_randomnumber.png'
        return super().get_available_name(custom_name, max_length)