删除 Flask 中 s3 Bucket 中未使用的图像

Deleting an unused image in s3 Bucket in Flask

我的 FLASK api 中有一个路由,它可以将图像上传到我的 s3 存储桶,然后将 url 保存到用户对象的 avatar_url 字段中。

@bp.route('/user/<userid>/files-upload', methods=['POST'])
def upload_file(userid):

  user = db_session.query(User).get(userid)

  img = request.files['file']
  if img:
          filename = secure_filename(img.filename)
          img.save(filename)
          s3.upload_file(
              Bucket = bucket,
              Filename = filename,
              Key = filename,
              ExtraArgs={
                "ACL": 'public-read',
                "ContentType": img.content_type  
              }
            )
          msg = "Upload Done ! "
          
  url = f'https://{bucket}.s3.amazonaws.com/{filename}'

  user.avatar_url = url

  try:
        db_session.commit()
        return user_schema.dumps(user)
  except:
        db_session.rollback()
        raise

这工作得很好,但后来我意识到,如果用户多次更改他们的图片,这可能会导致一堆未使用的文件闲置并堵塞我的存储桶。我想我需要起草一些删除旧文件的功能(如果有的话)?然后保存新文件?任何建议将不胜感激。

我建议在S3中使用用户ID作为对象键,这样有以下好处:

  • 用户以前上传的任何文件都会被新上传的文件覆盖。这会自动消除监视和查找旧文件的需要。
  • 如果组织决定开始保留旧版本,启用对象版本控制将很容易,这样你们就可以保留旧版本的个人资料照片。
avatar-s3/user-1.png
avatar-s3/user-2.png