Azure 函数 - 在新 blob 上设置 CloudBlockBlob 元数据

Azure function - Setting CloudBlockBlob metadata on a new blob

我创建了一个 Azure 函数,我想在其中从输入 blob 检索信息并在新创建的输出 blob 上设置元数据。但是我认为我没有正确设置元数据,因为我无法在我的应用程序的另一部分检索它。

A​​zure 函数代码:

    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 的元数据。