我想我知道你为什么会遇到这个问题。我相信这是门户网站的问题。如果您注意到,您的 blob 的名称是:Tommy French Toals.North Street.1250251
并且它包含空格。但是,如果您查看 URL,则名称为:Tommy%2520French%2520Toals.North%2520Street.1250251
. 注意 的存在%2520
。门户软件正在做的是它执行两次 URL 编码 - 首先,它space
在 blob 名称中进行%20
URL 编码,然后再次 URL 将%
符号编码为%25
,这让你搞砸了。
只是为了再次确定,我在我的存储帐户中上传了一个名称中包含空格的文件,当我尝试通过门户下载 blob 时,它失败并出现与您相同的错误。然后我使用存储客户端库为同一个 blob 创建了一个 SAS URI,它工作得非常好。这是我用于创建 SAS URI 的代码:
CloudStorageAccount storageAccount = new CloudStorageAccount(new StorageCredentials("myaccount", "myaccountkey"), true);
var blobContainer = storageAccount.CreateCloudBlobClient().GetContainerReference("mycontainer");
var blob = blobContainer.GetBlockBlobReference("this file has spaces in its name.txt");
var sas = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
{
SharedAccessExpiryTime = DateTime.UtcNow.AddHours(1),
Permissions = SharedAccessBlobPermissions.Read,
});
var sasUrl = blob.Uri.AbsoluteUri + sas;
尝试下载名称中不包含空格或任何特殊字符的文件,它应该可以正常工作。