在上传具有相同名称的新图像之前删除 S3 存储桶上的图像

Delete Image on S3 bucket before uploading new image with the same name

我有一个模型,它在保存时将我的图像上传到我的 S3 存储桶。但是当我想重新上传同名图像时遇到了一些麻烦。 (示例:徽标更新时需要重新上传)

因为图像已经存在,Django 使用它自己生成的扩展名来扩展路径名以使其唯一。我们不希望那样,我们想在上传新图像之前删除现有图像。这样,扩展就没有了。

我试过先用 pre_save 信号删除我的图像,但这只会让我的图像字段变空

@receiver(pre_save, sender=geo_models.Logo)
def remove_file_from_s3(sender, instance, using, **kwargs):
    instance.png.delete(save=False)

有什么办法吗?

型号:

class Logo(models.Model):
    logo_type_choices = Choices(
        ('ENTITY', _('Entity')),
        ('BRAND', _('Brand')),
    )

    class Meta:
        verbose_name = _('logo')
        verbose_name_plural = _('logos')

    png = models.ImageField(
        verbose_name='{0} {1}'.format('png', _('image')),
        upload_to=get_upload_loc_png,
        validators=[validators.validate_png_extension],
        storage=storage,
        max_length=200,
        blank=True,
        null=True,
    )

    logo_type = models.CharField(choices=logo_type_choices, max_length=20)

django-storages 有一个可选设置 AWS_S3_FILE_OVERWRITE。 默认情况下,它设置为 True (reference)。也就是说,默认情况下,同名文件会相互覆盖。将此设置为 False 以附加额外的字符。