发布到Azure blob存储时自动生成缩略图或预览图像

时间:2015-05-16 06:04:09

标签: azure azure-storage azure-storage-blobs

我将图片发布到Azure blob存储。当我存储全分辨率图像时,我想要维护图像的缩略图(或预览)的单独集合。是否可以编写脚本(或钩子),当图像上传到blob存储时,图像的缩略图也会自动保存。

请告知是否有办法编写此脚本。

我不想在客户端或服务器端进行大小调整。我使用SAS使客户端能够直接将图像上传到blob存储。我可以将图像发送到我正在运行的移动服务(服务器),其中图像可以调整大小并上传到blob存储。但我不想用这些调用重载服务器。

2 个答案:

答案 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可以从存储中获取上载的图像,调整大小并将调整大小的图像保存回存储。此模型的优势在于它具有可扩展性,您可以随着流量的变化而向上或向下扩展。