我目前正在尝试使用DownloadToStream方法从Azure blob存储中下载文件,以将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;
}
我正在关注this文档但是我似乎无法让它工作。任何帮助将不胜感激。
答案 0 :(得分:3)
然而,我没有得到任何回报,只是一个空字符串。
我测试你提供的代码,它可以正常工作。在您的情况下,我假设测试blob内容为空。我们可以通过以下方式解决问题:
1.请尝试检查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 storage explorer。请尝试使用上传的blob进行测试。
答案 1 :(得分:0)
如果要从Blob获取文本,可以使用DownloadTextAsync()
var text = await blockBlob2.DownloadTextAsync();
如果您想将文件流返回给API重新使用,则可以使用FileStreamResult,即IActionResult。
var stream = await blockBlob2.OpenReadAsync();
return File(stream, blockBlob2.Properties.ContentType, "name");