Azure blob存储下载流返回"" asp.net

时间:2017-09-26 02:15:52

标签: c# .net azure azure-storage-blobs

我目前正在尝试使用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文档但是我似乎无法让它工作。任何帮助将不胜感激。

2 个答案:

答案 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");