Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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
使用django存储和boto保存另一个同名文件_Django_Amazon S3_Boto_Django Storage - Fatal编程技术网

使用django存储和boto保存另一个同名文件

使用django存储和boto保存另一个同名文件,django,amazon-s3,boto,django-storage,Django,Amazon S3,Boto,Django Storage,我有一个模型Profile和一个与其关联的ImageField 图像上载到AWS S3 bucket,以便使用django存储和boto进行存储 如果我上传一个文件名已经存在的图像(eg:sample.png)Django默认情况下会将新文件另存为sample_1.png,将图像上传到AWS S3时该文件不起作用。有没有办法解决这个问题 如何将已存在文件名的图像上载到AWS S3而不覆盖它?如果您已在settings.MYMODEL\u FILES\u location中定义了存储桶位置,则可以

我有一个模型
Profile
和一个与其关联的
ImageField

图像上载到AWS S3 bucket,以便使用
django存储
boto
进行存储

如果我上传一个文件名已经存在的图像(
eg:sample.png
Django默认情况下会将新文件另存为
sample_1.png
,将图像上传到AWS S3时该文件不起作用。有没有办法解决这个问题


如何将已存在文件名的图像上载到AWS S3而不覆盖它?

如果您已在settings.MYMODEL\u FILES\u 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))
S3BOToRage的构造函数可以使用关键字参数“acl”来设置上传文件的权限,例如acl='private'

显示您说“不工作”的代码。