【问题标题】:Deleting an unused image in s3 Bucket in Flask在 Flask 的 s3 Bucket 中删除未使用的图像
【发布时间】:2022-01-24 07:03:40
【问题描述】:

我的 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

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

【问题讨论】:

  • 您可以创建一个更改按钮来删除该用户的所有文件。当用户想要更改他的图片时,他会删除所有旧文件,然后上传一个新文件。

标签: python amazon-web-services flask amazon-s3


【解决方案1】:

我建议在 S3 中使用用户的 ID 作为对象键,这将提供以下优点:

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

【讨论】:

  • 我是否需要将 URL 的最后一个参数也更改为 userId 或者可以将其保留为文件名?
猜你喜欢
  • 1970-01-01
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
相关资源
最近更新 更多