2015-05-16 5 views
7

Sto postando immagini nell'archiviazione BLOB di Azure. Mentre sto archiviando immagini a piena risoluzione, voglio mantenere una collezione separata di anteprime (o anteprime) delle immagini. È possibile scrivere uno script (o un hook) in cui, quando un'immagine viene caricata nella memoria BLOB, anche la miniatura dell'immagine viene automaticamente salvata.Generazione automatica di miniature o anteprima di immagini durante la registrazione nella memoria BLOB di Azure

Si prega di informare se c'è un modo per script questo.

Non voglio eseguire il ridimensionamento sul lato client o sul lato server. Sto utilizzando SAS per consentire al client di caricare direttamente le immagini sullo storage BLOB. Posso inviare l'immagine al servizio mobile (server) in cui sono in esecuzione dove l'immagine può essere ridimensionata e caricata nell'archivio blob. Ma non voglio sovraccaricare il server con queste chiamate.

risposta

5

Sì, è possibile, è possibile farlo distribuendo un WebJob utilizzando un BlobTrigger che prende l'inputstream per il blob appena creato e consente di modificarlo in un blob di output, il codice apparirebbe simile usando l'eccellente imageresizing biblioteca 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, 
     })); 
    } 

Tuttavia nella nostra messa a punto che abbiamo visto problemi quando si raggiunge un sacco di foto con la webjob gettando OutOfMemoryExceptions quando fare il controllo iniziale per blob non trasformati, ma che potrebbe essere specifico per il nostro setup (Abbiamo un sacco di foto). Abbiamo deciso di aggiungere manualmente un messaggio a una coda di archiviazione e invece di eseguire un processo Webjob utilizzando un QueueTrigger.

+0

È grandioso. Non conoscevo i WebJobs. Grazie :) – ma08

4

Continuare a caricare su Archiviazione, quindi inviare un evento a EventHub. È possibile implementare un EventProcessor e ospitare quel codice in un ruolo di lavoro. EventProcessor può scaricare l'immagine caricata, ridimensionarla e salvare le immagini ridimensionate nello spazio di archiviazione. Il vantaggio di questo modello è la sua scalabilità, è possibile scalare o ridurre come il traffico cambia.