我的 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
這很好用,但后來我意識到如果用戶多次更改他們的圖片,這可能會導致一堆未使用的檔案閑置并堵塞我的存盤桶。我想我需要起草一些洗掉舊檔案的功能(如果有的話)?然后保存新檔案?任何建議將不勝感激。
uj5u.com熱心網友回復:
我建議在 S3 中使用用戶的 ID 作為物件鍵,這將提供以下優點:
- 用戶上傳的任何以前的檔案都會被新的上傳覆寫。這自動消除了監視和查找舊檔案的需要。
- 如果組織決定開始保留舊版本,啟用物件版本控制將很容易,它允許你們保留舊版本的個人資料照片。
avatar-s3/user-1.png
avatar-s3/user-2.png
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/421259.html
標籤:
