Я использую Azure SDK для .Net (версия 9.3.1, платформа .NET-Standard 2.0) для работы с хранилищем BLOB-объектов Azure, и у меня возникают проблемы с обращением к блочным блобам, имеющим пустое пространство в имени блоба.
Я загрузил блочный BLOB-объект JSON Test.json в личный контейнер через Azure Storage Explorer 1.6.1.
Свойства BLOB-объектов в соответствии с Azure Storage Explorer:
Name: `JSON Test.json`
URI: `https://<myaccountname>/<mycontainername>/JSON%20Test.json`
Теперь я пытаюсь проверить, существует ли этот BLOB-объект с помощью метода CloudBlockBlob.ExistsAsync()
, передаваемого в GetBlockBlobReference
некодированное имя файла JSON Test.json
И получить ЛОЖЬ в результате.
Теперь я создаю большой двоичный объект программно в другом контейнере, передавая то же имя файла без кодировки, используя тот же GetBlockBlobReference
и получая созданный большой двоичный объект с закодированным именем файла.
Name: `JSON%20Test.json`
URI: `https://<myaccountname>/<mycontainername2>/JSON%20Test.json`
Что я делаю не так? Почему мой блочный блоб с пустым пространством в имени, созданный с помощью обозревателя хранилищ Azure, не найден при обращении к нему с некодированным именем файла? Почему при создании блочного блога программно передается незашифрованное имя файла, почему имя файла кодируется через провод?
Пожалуйста, помогите.
Заранее большое спасибо!
public async Task<bool> CheckExistsAsync(string connectionString, string containerName, string fileName)
{
var blockBlob = GetBlockBlobReference(connectionString, containerName, fileName);
return await blockBlob.ExistsAsync();
}
private static CloudBlockBlob GetBlockBlobReference(string connectionString, string containerName, string fileName)
{
return CloudStorageAccount
.Parse(connectionString)
.CreateCloudBlobClient()
.GetContainerReference(containerName)
.GetBlockBlobReference(fileName);
}