在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并开启版本控制。
结论
- 默认行为:在相同路径上传相同名称的文件会覆盖现有文件。
- 防止覆盖:可以通过给文件名添加唯一标识或启用版本控制来避免文件被覆盖。