2

I this question im Zusammenhang mit Azure Webjob und Ändern der Größe eines Bildes gespeichert als Blob beantwortet haben und so versuche ich, das gleiche zu tun, um eine neues Function AppAzure-Funktion - Bild in einem Klecks Behälter gespeichert Resize

Jedes Mal mit Blob wird hochgeladen, ich sende eine neue Queue-Nachricht. Meine Funktion wird durch die Warteschlangennachricht ausgelöst und an das hochgeladene Blob gebunden. Ich habe auch eine zweite Eingabebindung, die an einen anderen CloudBlobContainer bindet, um neue Bilder in der Größe in einen anderen Blobcontainer hochladen zu können.

Meine Funktion sieht wie folgt aus:

#r "System.Web" 
using System.IO; 
using System.Web; 
using ImageResizer; 
using Microsoft.Azure.WebJobs; 
using Microsoft.WindowsAzure; 
using Microsoft.WindowsAzure.Storage; 
using Microsoft.WindowsAzure.Storage.Blob; 

private static readonly int[] Sizes = { 800, 500, 250 }; 

public static void Run(string filename, Stream blobStream, CloudBlobContainer container, TraceWriter log) 
{ 
    log.Verbose($"C# Queue trigger function processed: {filename}"); 
    // Extract the filename and the file extension 
    var name = Path.GetFileNameWithoutExtension(filename); 
    var ext = Path.GetExtension(filename); 

    // Get the mime type to set the content type 
    var mimeType = MimeMapping.GetMimeMapping(filename); 

    foreach (var width in Sizes) 
    { 
     // Set the position of the input stream to the beginning. 
     blobStream.Seek(0, SeekOrigin.Begin); 

     // Get the output stream 
     var outputStream = new MemoryStream(); 
     ResizeImage(blobStream, outputStream, width); 

     // Get the blob reference 
     CloudBlockBlob blob = container.GetBlockBlobReference($"{name}-w{width}.{ext}"); 

     // Set the position of the output stream to the beginning. 
     outputStream.Seek(0, SeekOrigin.Begin); 
     blob.UploadFromStream(outputStream); 

     // Update the content type => don't know if required 
     blob.Properties.ContentType = mimeType; 
     blob.SetProperties(); 
    }    
} 

private static void ResizeImage(Stream input, Stream output, int width) 
{ 
    var instructions = new Instructions 
    { 
     Width = width, 
     Mode = FitMode.Carve, 
     Scale = ScaleMode.Both 
    }; 
    var imageJob = new ImageJob(input, output, instructions); 

    // Do not dispose the source object 
    imageJob.DisposeSourceObject = false; 
    imageJob.Build(); 
} 

Die zugehörige function.json Datei:

{ 
"bindings": [ 
    { 
    "queueName": "newfileuploaded", 
    "connection": "crazytunastorageaccount_STORAGE", 
    "name": "filename", 
    "type": "queueTrigger", 
    "direction": "in" 
    }, 
    { 
    "path": "input-images/{queueTrigger}", 
    "connection": "crazytunastorageaccount_STORAGE", 
    "name": "blobStream", 
    "type": "blob", 
    "direction": "in" 
    }, 
    { 
    "name": "container", 
    "type": "blob", 
    "path": "output-images", 
    "connection": "crazytunastorageaccount_STORAGE", 
    "direction": "in" 
    } 
], 
"disabled": false 
} 

Und die project.json Datei:

{ 
"frameworks": { 
    "net46":{ 
    "dependencies": { 
     "ImageResizer": "4.0.5", 
     "WindowsAzure.Storage": "4.3.0" 
    } 
    } 
} 
} 

Nun, wenn ich die Funktion kompiliert, habe ich immer habe diesen Fehler:

Microsoft.Azure.WebJobs.Host: Error indexing method 'Functions.ResizeBlobImage'. Microsoft.Azure.WebJobs.Host: Can't bind Blob to type 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer'.

Wird dieser Typ im Moment unterstützt?

+0

Sie sollten wahrscheinlich eine Ausgabe für die Funktion unter Integrationen in den Einstellungen für die Azure-Funktion verwenden, anstatt das Blob selbst zu erstellen. –

Antwort

1

Ja CloudBlobContainer wird unterstützt. Ich habe jetzt selbst eine schnelle Probe ausprobiert, und die folgende Funktion funktioniert für mich, indem ich dieselben verbindlichen Metadaten verwende, die Sie oben gezeigt haben. Ich verwende auch die gleiche Version des WebJobs SDK in project.json.

Nicht sicher, warum das nicht für Sie funktionierte. Ich habe von Zeit zu Zeit einige Probleme mit dem Portal gesehen (Bugs, die wir beheben), die manchmal Probleme verursachen.

+0

Ich habe es wiederholt und es funktioniert ... Ich musste eine Neukompilierung erzwingen. Vielen Dank – Thomas