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

C#中CloudBlockBlob的URI出现特殊字符%5C的解决方法

解决Azure Blob URI中出现%5C编码分隔符的问题

首先得指出你代码里的两个核心问题,这才是导致URI显示%5C的根源:

  1. 混淆了容器和Blob路径的概念:Azure Blob存储里,容器是存储账户下的顶级资源,不支持多级嵌套(比如Folder1/Folder2/Folder3不能作为容器名)。你说的“多级文件夹”其实是Blob名称的一部分,而非容器的路径。
  2. 误用了系统相关的目录分隔符:Path.DirectorySeparatorChar在Windows环境下是\,但Blob存储的路径分隔符必须是/,\会被自动URL编码成%5C,这就是你看到的奇怪字符。

修正后的完整代码

我把你的代码调整成符合Azure Blob规范的写法,同时解决分隔符问题:

using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string storageAccConnString = "你的存储账户连接字符串";
            // 修复CloudStorageAccount初始化错误
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageAccConnString);
            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

            // 容器是顶级资源,比如这里命名为"mycontainer"(根据你的实际容器名修改)
            string containerName = "mycontainer";
            CloudBlobContainer container = blobClient.GetContainerReference(containerName);
            // 可选:确保容器存在(如果还没创建的话)
            container.CreateIfNotExists();

            // Blob的完整路径(包含多级文件夹),统一用/作为分隔符
            string blobRelativePath = "Folder1/Folder2/Folder3/Test.zip";
            CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobRelativePath);

            // 现在输出的URI会是正确格式
            Console.WriteLine("URI : " + blockBlob.Uri);
            Console.WriteLine("URI : " + blockBlob.Uri.ToString());
            Console.WriteLine("URI : " + blockBlob.Uri.OriginalString);
            Console.ReadLine();
        }
    }
}

关键修正点说明

  • 容器与Blob路径的正确区分:容器名不能包含路径分隔符,所有的文件夹层级都要放到Blob的名称里,用/拼接。比如你要上传到Folder1/Folder2/Folder3下的文件,对应的Blob名称就是Folder1/Folder2/Folder3/Test.zip。
  • 统一使用/作为路径分隔符:不管你在Windows还是Linux环境下开发,Blob存储的路径都必须用/,绝对不要用Path.DirectorySeparatorChar,避免系统差异导致的编码问题。
  • 修复存储账户初始化错误:原代码里CloudStorageAccount storageAccount = "Account Name";是语法错误,必须用CloudStorageAccount.Parse()方法从连接字符串初始化。

额外小技巧

如果你的本地文件路径是Windows格式(比如C:\MyFiles\Test.zip),要构建Blob路径时,记得把本地路径里的\替换成/,示例代码如下:

string localFilePath = @"C:\MyFiles\Test.zip";
string fileName = System.IO.Path.GetFileName(localFilePath);
// 拼接Blob的完整路径
string blobRelativePath = $"Folder1/Folder2/Folder3/{fileName}";

这样处理后,你获取到的Blob URI就会是正常的格式(比如https://storageaccountname.blob.core.windows.net/mycontainer/Folder1/Folder2/Folder3/Test.zip),不会再出现%5C了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:33:17