我将图片发布到Azure blob存储。当我存储全分辨率图像时,我想要维护图像的缩略图(或预览)的单独集合。是否可以编写脚本(或钩子),当图像上传到blob存储时,图像的缩略图也会自动保存。
请告知是否有办法编写此脚本。
我不想在客户端或服务器端进行大小调整。我使用SAS使客户端能够直接将图像上传到blob存储。我可以将图像发送到我正在运行的移动服务(服务器),其中图像可以调整大小并上传到blob存储。但我不想用这些调用重载服务器。
答案 0 :(得分:5)
是的,确实可以,您可以通过使用BlobTrigger部署WebJob来实现这一点,BlobTrigger接受新创建的blob的输入流,并允许您将其修改为输出blob,使用优秀的imageresizing,代码看起来像这样。网络图书馆:
public static void ResizeMicroImages(
[BlobTrigger("orig/{name}.{ext}")] Stream input,
[Blob("90x126/{name}.png", FileAccess.Write)] Stream output
){
ImageBuilder.Current.Build(new ImageJob(input, output, new Instructions()
{
AutoRotate = true,
Width = 90,
Height = 126,
OutputFormat = OutputFormat.Png,
}));
}
然而,在我们的设置中,当我们在对未处理的blob进行初始检查时,使用webjob抛出OutOfMemoryExceptions来获取大量图片时我们遇到了问题,但这可能是我们的设置特有的(我们有很多图片)。我们更改为手动将消息添加到存储队列,而是让webjob使用QueueTrigger处理它。
答案 1 :(得分:4)
继续上传到存储,然后将活动发送到EventHub。您可以实现EventProcessor并以worker角色托管该代码。 EventProcessor可以从存储中获取上载的图像,调整大小并将调整大小的图像保存回存储。此模型的优势在于它具有可扩展性,您可以随着流量的变化而向上或向下扩展。