上传文件至Azure Blob存储容器时如何排除子文件夹
解决Windows下Azure Blob上传带本地路径层级的问题
问题根源是你在指定Blob名称时传入了本地文件的完整路径,Windows的路径格式会被当作Blob的层级结构。要统一只上传文件名,只需提取文件的纯文件名作为Blob的name参数即可。
具体修改方法
方法1:使用os.path.basename()
通过该方法提取纯文件名,自动兼容Windows和Mac的路径差异:
import os from azure.storage.blob import BlobServiceClient def upload_blob_file(self, blob_service_client: BlobServiceClient, container_name: str, local_file_path: str): container_client = blob_service_client.get_container_client(container=container_name) # 提取仅文件名部分 blob_name = os.path.basename(local_file_path) with open(file=local_file_path, mode="rb") as data: blob_client = container_client.upload_blob(name=blob_name, data=data, overwrite=True)
方法2:使用pathlib(Python 3.4+推荐)
用更现代的路径处理库,跨系统兼容性更稳定:
from pathlib import Path from azure.storage.blob import BlobServiceClient def upload_blob_file(self, blob_service_client: BlobServiceClient, container_name: str, local_file_path: str): container_client = blob_service_client.get_container_client(container=container_name) # 直接获取文件名 blob_name = Path(local_file_path).name with open(file=local_file_path, mode="rb") as data: blob_client = container_client.upload_blob(name=blob_name, data=data, overwrite=True)
关键说明
两种方法都会忽略系统路径格式,只返回文件的纯名称(比如file1.txt),确保上传后Blob直接存放在容器根目录,不会带上本地的路径层级结构。
内容的提问来源于stack exchange,提问作者Pedram
相关产品推荐
相关产品推荐

