【发布时间】:2019-11-22 02:53:42
【问题描述】:
在将 blob(图像)上传到 Azure 存储后,以下触发器会从它们中删除 exif 数据。问题是每个 blob 的 blob 触发器至少触发 5 次。
在触发器中,通过向 Blob 写入新的数据流来更新 Blob。我曾假设blob receipts 会阻止对该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}");
}
}
【问题讨论】:
-
你正在修改你的 trigger-blob
await image.UploadFromStreamAsync(exifStrippedImage);所以它又被触发了 -
@MarkusMeyer 这也是我的假设,但收据不应该阻止吗?
-
如收据中所述,您还必须检查
ETag。请看这里。这可能对你有用:https://stackoverflow.com/questions/44784094/cycling-azure-function-blob-trigger@Nattras
标签: azure azure-functions azure-blob-storage