You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地文件上传Minio服务器提示Permission denied的解决方法

问题描述

使用Minio客户端上传本地文件至服务器,代码如下:

# client: Minio
# upload local file in file_path to the minio server
client.fput_object(bucket_name, object_name, file_path)

运行时触发PermissionError,报错信息如下:

..\hydroprivatedata\minio_api.py:29: in minio_upload_csv
    client.fput_object(bucket_name, object_name, file_path)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <minio.api.Minio object at 0x000001FC32B9A3E0>
bucket_name = 'forestbat-private', object_name = 'driver_data_site24.csv'
file_path = 'C:\\Users\\Administrator\\.hydrodataset\\cache\\forestbat_test'
content_type = 'application/octet-stream', metadata = None, sse = None
progress = None, part_size = 0, num_parallel_uploads = 3, tags = None
retention = None, legal_hold = False

    def fput_object(self, bucket_name, object_name, file_path,
                    content_type="application/octet-stream",
                    metadata=None, sse=None, progress=None,
                    part_size=0, num_parallel_uploads=3,
                    tags=None, retention=None, legal_hold=False):
        """
        Uploads data from a file to an object in a bucket.
    
        :param bucket_name: Name of the bucket.
        :param object_name: Object name in the bucket.
        :param file_path: Name of file to upload.
        :param content_type: Content type of the object.
        :param metadata: Any additional metadata to be uploaded along
            with your PUT request.
        :param sse: Server-side encryption.
        :param progress: A progress object
        :param part_size: Multipart part size
        :param num_parallel_uploads: Number of parallel uploads.
        :param tags: :class:`Tags` for the object.
        :param retention: :class:`Retention` configuration object.
        :param legal_hold: Flag to set legal hold for the object.
        :return: :class:`ObjectWriteResult` object.
    
        Example::
            # Upload data.
            result = client.fput_object(
                "my-bucket", "my-object", "my-filename",
            )
    
            # Upload data with metadata.
            result = client.fput_object(
                "my-bucket", "my-object", "my-filename",
                metadata={"My-Project": "one"},
            )
    
            # Upload data with tags, retention and legal-hold.
            date = datetime.utcnow().replace(
                hour=0, minute=0, second=0, microsecond=0,
            ) + timedelta(days=30)
            tags = Tags(for_object=True)
            tags["User"] = "jsmith"
            result = client.fput_object(
                "my-bucket", "my-object", "my-filename",
                tags=tags,
                retention=Retention(GOVERNANCE, date),
                legal_hold=True,
            )
        """
    
        file_size = os.stat(file_path).st_size
>       with open(file_path, "rb") as file_data:
E       PermissionError: [Errno 13] Permission denied: 'C:\\Users\\Administrator\\.hydrodataset\\cache\\forestbat_test'

..\venv\lib\site-packages\minio\api.py:997: PermissionError

已确认报错目录所有者为当前用户,且以管理员权限运行PyCharm,同时从Minio服务器下载文件到本地目录可正常执行。

解决方案
  • 核心问题定位:传入fput_object的file_path是目录路径,而非具体文件路径。该方法需要读取指定路径的文件内容,尝试打开目录会直接触发权限拒绝错误。
  • 修正文件路径:将file_path修改为目标文件的完整路径,例如若要上传目录下的driver_data_site24.csv,路径应为:
    file_path = 'C:\\Users\\Administrator\\.hydrodataset\\cache\\forestbat_test\\driver_data_site24.csv'
    
  • 添加路径校验:可在上传前增加文件有效性检查,避免类似错误:
    import os
    if os.path.isfile(file_path) and os.access(file_path, os.R_OK):
        client.fput_object(bucket_name, object_name, file_path)
    else:
        print(f"错误:路径 {file_path} 不是有效文件或无读取权限")
    

内容的提问来源于stack exchange,提问作者forestbat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:23:14