С помощью метода ListBlobs () я вижу все капли. Каждый элемент большого двоичного объекта имеет URI, но я не вижу имени большого двоичного объекта, которое мне нужно для GetBlobReferenceFromServer ().
Причина в том, что метод ListBlobs
возвращает перечислимый типа IListBlobItem
, у которого нет свойства name. Чтобы получить имя большого двоичного объекта, вы можете привести его к CloudBlob
или CloudBlockBlob
, которые реализуют этот интерфейс, и вы сможете получить имя blob, который вы можете использовать GetBlobReferenceFromServer
метод.
Кстати, после того, как вы указали blob, вам действительно не нужно вызывать метод GetBlobReferenceFromServer
, поскольку у вас уже есть вся информация о blob как часть листинга . GetBlobReferenceFromServer делает еще один запрос к хранилищу, чтобы получить тот же набор свойств, который у вас уже есть как часть листинга.
Таким образом, ваш код может быть просто:
foreach (var blobItem in blobs)
{
var blockBlob = (CloudBlockBlob) blobItem;
MemoryStream downloadStream = new MemoryStream();
blockBlob.DownloadToStream(downloadStream);
string blobContent = Encoding.UTF8.GetString(downloadStream.ToArray());
}
Или, если вы не используете go down casting route, вы можете просто создать экземпляр CloudBlockBlob
, используя URI, который вы попал как часть листинга.
Примерно так:
foreach (var blobItem in blobs)
{
var blockBlob = new CloudBlockBlob(blobItem.Uri, container.ServiceClient);
MemoryStream downloadStream = new MemoryStream();
blockBlob.DownloadToStream(downloadStream);
string blobContent = Encoding.UTF8.GetString(downloadStream.ToArray());
}