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

如何用C#上传文件至现有Blob存储指定虚拟目录?代码问题求助

问题分析与修正方案

核心错误点

  • 容器名混淆:你误将虚拟目录路径folder-a/folder-b当作容器名,容器名应是Blob存储中已存在的真实容器名称(比如my-data-container这类)。
  • 错误创建容器:使用CreateBlobContainer会尝试新建容器,但你明确说明容器已存在,此操作会触发"容器已存在"的异常,需改用GetBlobContainerClient获取现有容器实例。
  • 虚拟目录未正确配置:Blob存储的虚拟目录是通过Blob名称的前缀实现的,上传时需将folder-a/folder-b/拼接在文件名前,才能让文件落在指定虚拟路径下。

修正后的代码

static string connectionString = "your-connection-string";
// 替换为你已存在的容器实际名称
static string containerName = "your-existing-container";
// 目标虚拟目录路径,末尾加斜杠确保路径层级正确
static string targetVirtualPath = "folder-a/folder-b/";

static void Main(string[] args)
{
    BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
    // 获取现有容器,而非创建新容器
    BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
    
    // 可选:提前验证容器是否存在,避免后续无意义操作
    if (!containerClient.Exists())
    {
        Console.WriteLine("指定容器不存在,请检查容器名称");
        return;
    }

    var files = Directory.GetFiles(@"C:/root");
    foreach (var file in files)
    {
        // 拼接虚拟目录与文件名,生成完整Blob路径
        string blobName = targetVirtualPath + Path.GetFileName(file);
        using (MemoryStream stream = new MemoryStream(File.ReadAllBytes(file)))
        {
            containerClient.UploadBlob(blobName, stream);
        }
        Console.WriteLine($"{file} 已上传");
    }
    Console.Read();
}

额外注意事项

  • 确保连接字符串对应的账号拥有Blob存储的写入权限,避免因权限不足导致上传失败。
  • 若上传大文件,建议改用异步方法UploadAsync并开启分块上传,降低内存占用。
  • Blob存储的虚拟目录无需提前创建,上传带前缀的Blob时会自动生成对应路径层级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:54:09