В настоящее время я пытаюсь загрузить файл из хранилища Azure blob с помощью метода DownloadToStream для загрузки содержимого blob в виде текстовой строки. Однако я ничего не получаю, кроме пустой строки.
Вот мой код, который я использую для подключения к контейнеру azure blob и извлечения файла blob.
public static string DownLoadFroalaImageAsString(string blobStorageName, string companyID)
{
// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
// Retrieve reference to a previously created container.
CloudBlobContainer container = blobClient.GetContainerReference(companyID.ToLower());
//retrieving the actual filename of the blob
string removeString = "BLOB/";
string trimmedString = blobStorageName.Remove(blobStorageName.IndexOf(removeString), removeString.Length);
// Retrieve reference to a blob named "trimmedString"
CloudBlockBlob blockBlob2 = container.GetBlockBlobReference(trimmedString);
string text;
using (var memoryStream = new MemoryStream())
{
blockBlob2.DownloadToStream(memoryStream);
text = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());
}
return text;
}
Я следил за этой документацией, но я не могу заставить ее работать. Любая помощь будет принята с благодарностью.
Однако я ничего не получаю, кроме пустой строки.
Я тестирую ваш поставляемый код на моей стороне, он работает правильно. Я предполагаю, что содержимое тестового блоба пусто в вашем случае. Мы могли бы стрелять следующими способами:
1.please попробуйте проверить длину memoryStream. Если длина равна 0, мы могли бы знать, что содержимое blob пусто.
using (var memoryStream = new MemoryStream())
{
blockBlob2.DownloadToStream(memoryStream);
var length = memoryStream.Length;
text = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());
}
2. Мы могли бы загрузить blob с контентом в контейнер, мы могли бы легко это сделать с помощью Azure-портала или Microsoft Azure. И попробуйте проверить его с загруженным блобом.
Если вы хотите получить текст из BLOB-объекта, вы можете использовать DownloadTextAsync()
var text = await blockBlob2.DownloadTextAsync();
Если вы хотите вернуть поток файлов обратно в ответ API, вы можете использовать FileStreamResult, который является IActionResult.
var stream = await blockBlob2.OpenReadAsync();
return File(stream, blockBlob2.Properties.ContentType, "name");