【发布时间】:2021-02-08 11:03:28
【问题描述】:
我有一个代码可以打开存储上 blob 的流以读取其内容(步骤如下所述),该 blob 是一个有时为空的 Json 文件,它出现在 azure 门户上,带有 0B,并且可以下载和打开了。
我检查 blobStream.Length 属性以了解它是否为空 blob 用于处理文件,出于某种原因,无论文件是否为空,Length 属性为 -1 而不是 0。
我在某些地方读到 -1 是属性的初始化值,并且必须调用 FetchAttributesAsync 才能更新元数据。我在 Microsoft 文档中读到调用 OpenReadAsync 会自动调用 FetchAttributesAsync,在这些文档在备注下:
不确定发生了什么,问题是 FetchAttributes 调用还是打开流的问题,以及为什么 Length 始终为 -1。
我使用 Azure.Storage.Blobs,用连接字符串创建一个 blob 客户端并返回 blob 流以读取其内容
_blobServiceClient = new BlobServiceClient(connectionString);
blobStream = await _blobServiceClient.GetBlobContainerClient(container).GetBlobClient(blobName).OpenReadAsync(cancellationToken: cancellationToken);
在从 OpenReadAsync 返回的流上,我们检查长度 .. 并处理文件:
if( blobStream.Length == 0 ) continue;
【问题讨论】:
-
您发布的代码真的是您实际使用的代码吗?因为我希望在某处看到
await。 -
我没有复制过去我写了我一般所做的,无论如何编辑了问题。
标签: c# azure blob storage azure-blob-storage