在MinIO中,如果在同一路径下上传同一张图片(即使用相同的对象名称),新的上传会覆盖现有的对象。

这是因为MinIO和S3的存储机制是基于对象名称的键值对存储,路径实际上是对象名称的一部分。

示例:

假设上传了一张图片到 Work/small/image.jpg,然后再次上传另一张图片到同样的路径 Work/small/image.jpg,第二次上传会覆盖第一次上传的文件。

解决方法:

如果希望保存同一张图片的多个版本,可以考虑以下方法:

  1. 使用唯一的对象名称
    给每个上传的文件使用一个唯一的名称。例如,可以在文件名中添加时间戳或UUID来区分不同的文件版本:
import uuid

unique_name = f"Work/small/{uuid.uuid4()}_{image_name}"
minio_client.fput_object(bucket_name, unique_name, image_path)
  1. 启用版本控制
    MinIO支持对象版本控制,但默认情况下是关闭的。如果你启用版本控制,即使你上传了同一张图片到相同的路径,MinIO也会为每次上传生成一个新版本,而不是覆盖旧版本。这需要配置MinIO并开启版本控制。

结论

  • 默认行为:在相同路径上传相同名称的文件会覆盖现有文件。
  • 防止覆盖:可以通过给文件名添加唯一标识或启用版本控制来避免文件被覆盖。