在MinIO中,如果在同一路徑下上傳同一張圖片(即使用相同的物件名稱),新的上傳會覆蓋現有的物件。
這是因為MinIO和S3的儲存機制是基於物件名稱的鍵值對儲存,路徑實際上是物件名稱的一部分。
示例:
假設上傳了一張圖片到 Work/small/image.jpg
,然後再次上傳另一張圖片到同樣的路徑 Work/small/image.jpg
,第二次上傳會覆蓋第一次上傳的檔案。
解決方法:
如果希望儲存同一張圖片的多個版本,可以考慮以下方法:
-
使用唯一的物件名稱:
給每個上傳的檔案使用一個唯一的名稱。例如,可以在檔名中新增時間戳或UUID來區分不同的檔案版本:import uuid unique_name = f"Work/small/{uuid.uuid4()}_{image_name}" minio_client.fput_object(bucket_name, unique_name, image_path)
-
啟用版本控制:
MinIO支援物件版本控制,但預設情況下是關閉的。如果你啟用版本控制,即使你上傳了同一張圖片到相同的路徑,MinIO也會為每次上傳生成一個新版本,而不是覆蓋舊版本。這需要配置MinIO並開啟版本控制。
結論
- 預設行為:在相同路徑上傳相同名稱的檔案會覆蓋現有檔案。
- 防止覆蓋:可以透過給檔名新增唯一標識或啟用版本控制來避免檔案被覆蓋。