使用 Django 存储删除 Amazon S3 中的文件

Saf*_*ari 9 python django amazon-s3 amazon-web-services django-storage

在我的 Django 项目中,我使用 Django-storageS 将媒体文件保存在我的 Amazon S3 中。

我遵循了本教程(我也使用了 Django-rest-framework)。这对我很有效:我可以上传一些图片,并且可以在我的 S3 存储中看到这些图片。

但是,如果我尝试删除我的模型的一个实例(包含 ImageField),这不会删除 S3 中的相应文件。这是正确的吗?我也不需要删除 S3 中的资源。

Lan*_*nce 5

删除记录不会自动删除 S3 Bucket 中的文件。为了删除 S3 资源,您需要在文件字段上调用以下方法:

model.filefield.delete(save=False)  # delete file in S3 storage
Run Code Online (Sandbox Code Playgroud)

您可以在

  1. delete你的模型的方法
  2. 一个pre_delete信号

以下是如何在delete模型方法中实现此目的的示例:

def delete(self):
    self.filefield.delete(save=False)
    super().delete()
Run Code Online (Sandbox Code Playgroud)


Her*_*ang 3

您可以使用以下代码提供其 id(S3 存储中的文件名)来删除 S3 文件:

import boto
from boto.s3.key import Key
from django.conf import settings

def s3_delete(id):
    s3conn = boto.connect_s3(settings.AWS_ACCESS_KEY,
            settings.AWS_SECRET_ACCESS_KEY)
    bucket = s3conn.get_bucket(settings.S3_BUCKET)

    k = Key(bucket)
    k.key = str(id)
    k.delete()
Run Code Online (Sandbox Code Playgroud)

确保在 settings.py 中正确设置 S3 变量,包括:AWS_ACCESS_KEYAWS_SECRET_ACCESS_KEYS3_BUCKET