C#中CloudBlockBlob的URI出现特殊字符%5C的解决方法
解决Azure Blob URI中出现%5C编码分隔符的问题
首先得指出你代码里的两个核心问题,这才是导致URI显示%5C的根源:
- 混淆了容器和Blob路径的概念:Azure Blob存储里,容器是存储账户下的顶级资源,不支持多级嵌套(比如
Folder1/Folder2/Folder3不能作为容器名)。你说的“多级文件夹”其实是Blob名称的一部分,而非容器的路径。 - 误用了系统相关的目录分隔符:
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
相关产品推荐
相关产品推荐

