【问题标题】:How do I retrieve the contents of an Azure blob?如何检索 Azure blob 的内容?
【发布时间】:2021-11-08 05:45:43
【问题描述】:

我以前从未这样做过,但我通过将对象转换为字符串并流式传输到 Azure 来将其保存到 Azure Blob 存储。我检查了 Azure 中的 blob,它看起来完全符合我的预期,如下所示:

{"ClientID":"xxxx.xxxxxxxx.xxxx","ClientSecret":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxx","RedirectURL":"","GrantToken":"GRANT token","RefreshToken":null,"AccessToken":null,"ExpiresIn":null,"UserMail":null,"Id":null}

当我检索 blob 时,我似乎只获取元数据并且 Content 元素是空白的。这是检索 blob 的代码

        public Token GetToken(UserSignature user, Token token)
        {

            try
            {
                var connectionString = "connection-string-goes-here";
                
                BlobClient blobClient = new BlobClient(connectionString, "container-name-goes-here", "blob-name-goes-here");
                var download = blobClient.DownloadContent();
                BinaryData data = new BinaryData(download);
                var test = data.ToArray();
                var test2 = Encoding.UTF8.GetString(test);
                 Token result = JsonConvert.DeserializeObject<OAuthToken>(test2);

                return token;
            }
            catch (Exception e)
            {
                //ToDo: implement error logging to blob
                
            }

这是调用 '''GetString(test)''' 后的结果。最后一个元素是 Content,它是空的。

{"Value":{"Details":{"BlobType":0,"ContentLength":236,"ContentType":"application/octet-stream","ContentHash":"t6oIPlIWyChaWSo9tseiMw==","LastModified":"2021-09-12T18:14:36+00:00","Metadata":{},"ContentRange":null,"ETag":"\u00220x8D976192D9F53B0\u0022","ContentEncoding":null,"CacheControl":null,"ContentDisposition":null,"ContentLanguage":null,"BlobSequenceNumber":0,"CopyCompletedOn":"0001-01-01T00:00:00+00:00","CopyStatusDescription":null,"CopyId":null,"CopyProgress":null,"CopySource":null,"CopyStatus":0,"LeaseDuration":0,"LeaseState":0,"LeaseStatus":0,"AcceptRanges":"bytes","BlobCommittedBlockCount":0,"IsServerEncrypted":true,"EncryptionKeySha256":null,"EncryptionScope":null,"BlobContentHash":null,"TagCount":0,"VersionId":null,"IsSealed":false,"ObjectReplicationSourceProperties":null,"ObjectReplicationDestinationPolicyId":null,"LastAccessed":"0001-01-01T00:00:00+00:00"},"Content":{}}}

我需要获取 blob 并将其转回 C# 对象。我读过很多文章,它们都展示了一种略有不同的做法。提前感谢您的帮助。

【问题讨论】:

    标签: c# azure azure-blob-storage


    【解决方案1】:

    您可以使用BlobContainerClient.GetBlobClient 方法获取您的blob。

    
    BlobServiceClient blobServiceClient = new BlobServiceClient(yourConnectionString);
    BlobContainerClient containerClient = await blobServiceClient.GetBlobContainerClient(yourContainerName);
    
    
    // Get specific blob
    var blob = await containerClient.GetBlobClient(yourBlobName);
    

    它返回一个BlobClient。您可以使用 BlobClient 的 Uri 属性来查看您保存的图像,或者如果您想下载内容可以使用DownloadContentAsync 方法。

    var content = await blob.DownloadContentAsync();
    

    【讨论】:

    • 感谢 Engincan,但我使用的是 blob 客户端,它获取的是元数据而不是内容。 ` BlobClient blobClient = new BlobClient(connectionString, "container-name-goes-here", "blob-name-goes-here"); var 下载 = blobClient.DownloadContent(); `
    【解决方案2】:

    我正在关闭这篇文章,我不知道有什么办法可以做到这一点,只能回答它。我没有修复错误,但我也发现我采取了错误的方法。谢谢你帮助我。

    【讨论】:

      猜你喜欢
      • 2018-11-19
      • 2016-11-13
      • 2021-04-14
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 2015-07-27
      • 2021-12-22
      • 2022-11-06
      相关资源
      最近更新 更多