Azure 函数 - 在新 blob 上设置 CloudBlockBlob 元数据
Azure function - Setting CloudBlockBlob metadata on a new blob
我创建了一个 Azure 函数,我想在其中从输入 blob 检索信息并在新创建的输出 blob 上设置元数据。但是我认为我没有正确设置元数据,因为我无法在我的应用程序的另一部分检索它。
Azure 函数代码:
public static async Task Run(
[BlobTrigger("inputcontainer/{name}")] Stream inputBlob,
[Blob("outputcontainer/{name}.jpeg", FileAccess.Write)] CloudBlockBlob outputBlob,
string name,
ExecutionContext executionContext,
ILogger log)
{
// code that processes input and extracts some info - including senderId
....
....
// task to generate a thumbnail from a video, returns a stream representing thumbnail
var thumbnailTask = GenerateThumbnail(inputBlob);
Stream ms = thumbnailTask.Result;
ms.Position = 0;
outputBlob.Metadata["SenderId"] = senderId;
outputBlob.UploadFromStream(ms);
}
以下是我在应用程序其他地方读取 CloudBlockBlob 的方式。此时我可以正常读取我上传的流,但是 blob.Metadata 是空的:
BlobResultSegment blobResultSegment = await outputContainer.ListBlobsSegmentedAsync(null);
foreach (IListBlobItem item in blobResultSegment.Results)
{
CloudBlockBlob blob = (CloudBlockBlob)item;
// count = 0
Console.WriteLine($"Blob info {blob.Metadata.Count}");
我不明白为什么没有在新 blob 上设置元数据。非常感谢任何帮助。谢谢
您设置元数据的代码没有任何问题,设置正确。问题在于获取 blob 列表的代码。当您列出 blob 时,默认情况下不会获取 blob 的元数据。
请使用ListBlobsSegmentedAsync(String, Boolean, BlobListingDetails, Nullable<Int32>, BlobContinuationToken, BlobRequestOptions, OperationContext, CancellationToken)
override for listing blobs and provide BlobListingDetails. Metadata
for BlobListingDetails
参数。执行此操作后,您应该能够看到 blob 的元数据。
我创建了一个 Azure 函数,我想在其中从输入 blob 检索信息并在新创建的输出 blob 上设置元数据。但是我认为我没有正确设置元数据,因为我无法在我的应用程序的另一部分检索它。
Azure 函数代码:
public static async Task Run(
[BlobTrigger("inputcontainer/{name}")] Stream inputBlob,
[Blob("outputcontainer/{name}.jpeg", FileAccess.Write)] CloudBlockBlob outputBlob,
string name,
ExecutionContext executionContext,
ILogger log)
{
// code that processes input and extracts some info - including senderId
....
....
// task to generate a thumbnail from a video, returns a stream representing thumbnail
var thumbnailTask = GenerateThumbnail(inputBlob);
Stream ms = thumbnailTask.Result;
ms.Position = 0;
outputBlob.Metadata["SenderId"] = senderId;
outputBlob.UploadFromStream(ms);
}
以下是我在应用程序其他地方读取 CloudBlockBlob 的方式。此时我可以正常读取我上传的流,但是 blob.Metadata 是空的:
BlobResultSegment blobResultSegment = await outputContainer.ListBlobsSegmentedAsync(null);
foreach (IListBlobItem item in blobResultSegment.Results)
{
CloudBlockBlob blob = (CloudBlockBlob)item;
// count = 0
Console.WriteLine($"Blob info {blob.Metadata.Count}");
我不明白为什么没有在新 blob 上设置元数据。非常感谢任何帮助。谢谢
您设置元数据的代码没有任何问题,设置正确。问题在于获取 blob 列表的代码。当您列出 blob 时,默认情况下不会获取 blob 的元数据。
请使用ListBlobsSegmentedAsync(String, Boolean, BlobListingDetails, Nullable<Int32>, BlobContinuationToken, BlobRequestOptions, OperationContext, CancellationToken)
override for listing blobs and provide BlobListingDetails. Metadata
for BlobListingDetails
参数。执行此操作后,您应该能够看到 blob 的元数据。