本地文件上传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
相关产品推荐
相关产品推荐

