IT小春子 2024-05-24 17:13 采纳率: 72.7%
浏览 256

minio删除桶可以实现成功删除,为什么删除指定文件或指定目录就不能成功删除呢?

minio删除桶可以实现成功删除,为什么删除指定文件或指定目录就不能成功删除呢?

运行python输出:
File 'dzjz/yxsj/dzjzzz/522700/d9d56b3a2c6b45a79a7e49ea71ee0baf/01e7384be5064c37b425efe180356285/01e7384be5064c37b425efe180356285.jpg' has been deleted.
All objects under folder 'dzjz/yxsj/dzjzzz/522700/d9d56b3a2c6b45a79a7e49ea71ee0baf/' have been deleted.

代码如下:


from minio import Minio
import re
import re
def delete_single_file(minio_client, bucket_name, file_path):
    """
    删除MinIO中指定文件。

    :param minio_client: Minio客户端实例
    :param bucket_name: 存储桶名称
    :param file_path: 文件路径
    """
    try:
        # 执行删除操作
        minio_client.remove_object(bucket_name, file_path)
        print(f"File '{file_path}' has been deleted.")
    except Exception as err:
        print(f"An error occurred: {err}")
def delete_bucket_folder(minio_client, bucket_name, folder_path):
    """
    删除MinIO中指定文件夹及其所有子对象。

    :param minio_client: Minio客户端实例
    :param bucket_name: 存储桶名称
    :param folder_path: 要删除的文件夹路径(以斜杠结尾)
    """
    try:
        # 获取所有匹配路径的对象
        objects = list(minio_client.list_objects(bucket_name, prefix=folder_path, recursive=True))

        # 直接在结果中使用正则表达式匹配
        objects = [obj for obj in objects if re.match(f'^{re.escape(folder_path)}', obj.object_name)]

        print(f"Objects under folder '{folder_path}':")
        if objects:
            print(f"Found {len(objects)} objects to delete under folder '{folder_path}'.")

            # 确认用户是否希望继续删除
            confirm = input("Are you sure you want to delete these objects? (yes/no): ")
            if confirm.lower() != 'yes':
                print("Deletion cancelled.")
                return
            print("All objects:")


            # 执行删除操作
            for obj in objects:
                print(obj.object_name)
                minio_client.remove_object(bucket_name, obj.object_name)
                print(f"Deleted: {obj.object_name}")

            print(f"All objects under folder '{folder_path}' have been deleted.")
        else:
            print(f"No objects found under folder '{folder_path}'.")

    except Exception as err:
        print(f"An error occurred: {err}")

def delete_bucket_folder1(minio_client, bucket_name, folder_path):
    """
    删除MinIO中指定文件夹及其所有子对象。

    :param minio_client: Minio客户端实例
    :param bucket_name: 存储桶名称
    :param folder_path: 要删除的文件夹路径(以斜杠结尾)
    """
    try:
        # 获取所有匹配路径的对象
        objects = list(minio_client.list_objects(bucket_name, prefix=folder_path, recursive=True))

        # 递归删除所有对象
        for obj in objects:
            if obj.is_prefix():
                delete_bucket_folder(minio_client, bucket_name, obj.object_name)
            else:
                minio_client.remove_object(bucket_name, obj.object_name)
                print(f"Deleted: {obj.object_name}")

        print(f"All objects under folder '{folder_path}' have been deleted.")
    except Exception as err:
        print(f"An error occurred: {err}")
def main():
    # 创建MinIO客户端
    minio_client = Minio(
        "192.168.100.67:9000",
        access_key="minioadmin",
        secret_key="minioadmin",
        secure=False
    )
##
##    # 要删除的文件夹路径
##    folder_to_delete = "/yxsj/dzjzzz/"
##
##    # 删除指定路径下的所有对象
##    delete_bucket_folder(minio_client, "dzjz", folder_to_delete)

##    # 要删除的文件路径
##    file_to_delete = "dzjz/yxsj/dzjzzz/522700/d9d56b3a2c6b45a79a7e49ea71ee0baf/01e7384be5064c37b425efe180356285/01e7384be5064c37b425efe180356285.jpg"
##
##    # 删除指定路径的文件
##    delete_single_file(minio_client, "dzjz", file_to_delete)

        # 要删除的文件夹路径
    folder_to_delete = "dzjz/yxsj/dzjzzz/522700/d9d56b3a2c6b45a79a7e49ea71ee0baf/"

    # 删除指定路径的文件夹
    delete_bucket_folder1(minio_client, "dzjz", folder_to_delete)
if __name__ == "__main__":
    main()
  • 写回答

3条回答 默认 最新

  • 关注

    上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    问题描述: 对于特定文件或特定目录的删除操作,minio删除桶不能成功。这种情况可能是由于各种原因引起的,包括但不限于文件或目录权限不足、环境变量设置不正确等。 解决方案:

    1. 检查文件或目录的权限。确保您有对文件或目录的访问权,并且这些权限已经配置到minio客户端中。如果没有,您需要登录到minio服务器并重置权限。 示例代码:minio_client.set_bucket(bucket_name)minio_client.delete_object(bucket_name, file_path)中的bucket_name参数应替换为实际的存储桶名称。

    2. 检查环境变量设置。确保您已经在运行minio客户端之前设置了相应的环境变量,例如MINIO_ACCESS_KEYMINIO_SECRET_KEYMINIO_SECRET_FILE。如果这些环境变量未设置或者设置错误,minio客户端将无法连接到minio服务器。 示例代码:os.environ['MINIO_ACCESS_KEY'] = access_keyos.environ['MINIO_SECRET_KEY'] = secret_key应替换为实际的环境变量值。

    3. 使用正确的文件名和路径。minio客户端应该能够识别文件名和路径,但可能由于格式问题导致读取失败。您可以尝试使用更简洁的文件名,或者将文件名分解为多个部分,然后使用这些部分作为文件名。另外,确保文件路径是绝对路径而非相对路径。 示例代码:folder_to_delete = "/yxsj/dzjzzz/"应替换为实际的文件夹路径。

    4. 在删除文件时,确认您是否希望继续删除。有时候,如果文件被意外地保存或删除,minio客户端可能会认为这是一个新对象,而不是一个已存在的对象,从而导致删除失败。如果您不确定,可以在删除文件前询问用户是否希望继续删除。 示例代码:confirm = input("Are you sure you want to delete these objects? (yes/no): ")应替换为input()函数返回的字符串。默认情况下,该字符串是'yes'

    请注意,以上建议仅供参考,实际情况可能有所不同。在进行任何更改之前,都应该先测试和验证更改。

    评论

报告相同问题?

问题事件

  • 修改了问题 5月24日
  • 创建了问题 5月24日

悬赏问题

  • ¥15 各位帮我看看为什么我写的代码按钮按了没有反应,deveco studio,
  • ¥20 云南省制造业对经济增长的影响目录应该怎么罗列,就是现状那部分
  • ¥15 绘制饼图及环形图(饼图和环形图示)
  • ¥15 求一套完整的纵横四海程序。
  • ¥20 AD7606采集到电压乱飘,怎么解决呢
  • ¥60 有没有人查监控方面厉害的呢
  • ¥15 绑住完成C语言的任务
  • ¥20 vue项目打包Android apk,实现小说文本朗读功能
  • ¥50 IPv6网络,br-lan拿不到地址无法全局路由
  • ¥15 微信小程序分页查询如何设置下一页