【问题标题】:Auto generation of thumbnails or preview of images when posting to Azure blob storage发布到 Azure Blob 存储时自动生成缩略图或预览图像
【发布时间】:2015-07-28 03:20:27
【问题描述】:
我将图片发布到 Azure blob 存储。当我存储全分辨率图像时,我想维护一个单独的图像缩略图(或预览)集合。是否可以编写一个脚本(或钩子),当图像上传到 blob 存储时,图像的缩略图也会自动保存。
请告知是否有办法编写此脚本。
我不想在客户端或服务器端调整大小。我正在使用 SAS 使客户端能够直接将图像上传到 blob 存储。我可以将图像发送到我正在运行的移动服务(服务器),图像可以在其中调整大小并上传到 blob 存储。但我不想用这些调用使服务器超载。
【问题讨论】:
标签:
azure
azure-storage
azure-blob-storage
【解决方案1】:
是的,这确实是可能的,您可以通过使用 BlobTrigger 部署 WebJob 来做到这一点,该 BlobTrigger 将输入流用于新创建的 blob,并让您将其修改为输出 blob,使用出色的图像大小调整代码看起来像这样。网络库:
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,
}));
}
但是,在我们的设置中,当我们遇到很多图片时,我们遇到了一些问题,webjob 在对未处理的 blob 进行初始检查时抛出 OutOfMemoryExceptions,但这可能特定于我们的设置(我们有很多图片)。我们改为手动将消息添加到存储队列,而是让 webjob 使用 QueueTrigger 处理它。
【解决方案2】:
继续上传到存储,然后发送事件到EventHub。您可以实现EventProcessor 并将该代码托管在工作者角色中。 EventProcessor 可以从存储中获取上传的图像,调整大小,并将调整大小的图像保存回存储。该模型的优势在于它具有可扩展性,您可以随着流量的变化而扩大或缩小规模。