简体   繁体   English

Django-AWS S3,无法删除存储桶对象

[英]Django-AWS S3, unable to delete bucket objects

I have a Django project with MySQL storage and media objects (images) are being stored in AWS S3 simple storage.我有一个 Django 项目,其中 MySQL 存储和媒体对象(图像)存储在 AWS S3 简单存储中。

Admin can upload images through admin panel and its being displayed in website too.管理员可以通过管理面板上传图片,也可以在网站上显示。

When admin delete objects, it gets deleted in MySQL but it's associated images persists in S3 bucket.当管理员删除对象时,它会在 MySQL 中被删除,但它的关联图像会保留在 S3 存储桶中。

SETTINGS.PY设置.py

AWS_ACCESS_KEY_ID = ''
AWS_SECRET_ACCESS_KEY = ''
AWS_STORAGE_BUCKET_NAME = ''
AWS_S3_CUSTOM_DOMAIN = f"{AWS_STORAGE_BUCKET_NAME}.s3.me-south-1.amazonaws.com"
AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=86400'}
PUBLIC_MEDIA_LOCATION = 'media'
MEDIA_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/{PUBLIC_MEDIA_LOCATION}/'
DEFAULT_FILE_STORAGE = 'news.storage_backends.MediaStorage'

STORAGE_BACKENDS.PY STORAGE_BACKENDS.PY

from storages.backends.s3boto3 import S3Boto3Storage
from django.conf import settings


class MediaStorage(S3Boto3Storage):
    location = 'media'
    default_acl = 'public-read'
    file_overwrite = False

I am user details as attached,我是附件中的用户详细信息,

在此处输入图像描述

As Luiz said, the files persist after deleting the object.正如 Luiz 所说,这些文件在删除 object 后仍然存在。 I recommend to create a signal to delete the files after the object has been deleted:我建议在删除 object 后创建一个删除文件的信号:

@receiver(models.signals.post_delete, sender=YourModel)
def remove_image_file_from_s3_on_delete(sender, instance, **kwargs):
    instance.your_field_name.delete(save=False)

I have used django-cleanup app, its fairly easy to setup https://pypi.org/project/django-cleanup/我使用了django-cleanup应用程序,它相当容易设置https://pypi.org/project/django-cleanup/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM