首页 > 解决方案 > Azure BlobTrigger 为每个新 blob 触发 > 5 次

问题描述

以下触发器在将 blob(图像)上传到 azure 存储后从它们中删除 exif 数据。问题是每个 blob 的 blob 触发器至少触发 5 次。

在触发器中,通过向其写入新的数据流来更新 blob。我曾假设Blob 收据会阻止针对该 Blob 进一步触发 Blob 触发器。

[FunctionName("ExifDataPurge")]
public async System.Threading.Tasks.Task RunAsync(
    [BlobTrigger("container/{name}.{extension}", Connection = "")]CloudBlockBlob image,
    string name,
    string extension,
    string blobTrigger,
    ILogger log)
{
    log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name}");

    try
    {
        var memoryStream = new MemoryStream();
        await image.DownloadToStreamAsync(memoryStream);
        memoryStream.Position = 0;
        using (Image largeImage = Image.Load(memoryStream))
        {
            if (largeImage.Metadata.ExifProfile != null)
            {
                //strip the exif data from the image. 
                for (int i = 0; i < largeImage.Metadata.ExifProfile.Values.Count; i++)
                {
                    largeImage.Metadata.ExifProfile.RemoveValue(largeImage.Metadata.ExifProfile.Values[i].Tag);
                }

                var exifStrippedImage = new MemoryStream();
                largeImage.Save(exifStrippedImage, new SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder());
                exifStrippedImage.Position = 0;

                await image.UploadFromStreamAsync(exifStrippedImage);
            }
        }
    }
    catch (UnknownImageFormatException unknownImageFormatException)
    {
        log.LogInformation($"Blob is not a valid Image : {name}.{extension}");
    }
}

标签: azureazure-functionsazure-blob-storage

解决方案


触发器的处理方式是通过将收据存储在容器中来跟踪哪些 blob 已被处理azure-webjobs-hosts。任何没有收据的 blob 或旧收据(基于 blob ETag)都将被处理(或重新处理)。

因为你调用 await image.UploadFromStreamAsync(exifStrippedImage);它被触发(假设它没有被处理)


推荐阅读