2015-05-16 29 views
7

我將圖片張貼到Azure blob存儲。由於我存儲全分辨率圖像,因此我想保留一個單獨的縮略圖集(或預覽圖)。是否有可能編寫腳本(或掛鉤),當圖像上傳到blob存儲時,圖像的縮略圖也會自動保存。在發佈到Azure blob存儲時自動生成縮略圖或預覽圖像

請告知是否有辦法編寫腳本。

我不想在客戶端或服務器端進行大小調整。我正在使用SAS來讓客戶端直接將圖像上傳到BLOB存儲。我可以將圖像發送到我正在運行的移動服務(服務器),可以在其中調整圖像大小並上傳到BLOB存儲。但我不想用這些調用來重載服務器。

回答

5

是的確實可行,您可以通過使用BlobTrigger部署WebJob來完成此操作,該BlobTrigger將輸入流用於新創建的blob,並讓您將其修改爲輸出blob,代碼看起來像使用優秀的imageresizing .NET庫:

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投擲OutOfMemoryExceptions當它做未處理的斑點最初的檢查圖片,但可能是具體到我們的設置(我們有很多照片)。我們更改爲手動將消息添加到存儲隊列,而是使用QueueTrigger進行webjob處理。

+0

太好了。不知道WebJobs。謝謝 :) – ma08

4

繼續上傳到存儲,然後發送活動到EventHub。您可以實施EventProcessor並將該代碼託管在輔助角色中。 EventProcessor可以從存儲中獲取上傳的圖像,調整大小並將調整大小的圖像保存回存儲。這種模式的優勢在於它具有可擴展性,您可以隨着流量的變化進行擴展或縮減。