Azure-Funktion - Größe des in einem Blob-Container gespeicherten Bilds ändern
Ich habe geantwortetdiese Frag im Zusammenhang mit Azure Webjob und Ändern der Größe eines als Blob gespeicherten Bilds. Daher versuche ich, dasselbe mit einem @ zu tuFunction App
Jedes Mal, wenn ein neuer Blob hochgeladen wird, sende ich eine neue Warteschlangennachricht. Meine Funktion wird durch die Warteschlangennachricht ausgelöst und an den hochgeladenen Blob gebunden. Ich habe auch eine zweite Eingabebindung, die an einen anderen CloudBlobContainer gebunden wird, um neue Bilder mit geänderter Größe in einen anderen Blob-Container hochladen zu können.
Meine Funktion sieht so 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();
}
Der zugehörigefunction.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 dieproject.json
Datei
{
"frameworks": {
"net46":{
"dependencies": {
"ImageResizer": "4.0.5",
"WindowsAzure.Storage": "4.3.0"
}
}
}
}
Jetzt, wenn ich die Funktion kompiliert habe, habe ich immer diesen Fehler erhalten:
Microsoft.Azure.WebJobs.Host: Fehler beim Indizieren der Methode 'Functions.ResizeBlobImage'. Microsoft.Azure.WebJobs.Host: Blob kann nicht an den Typ "Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer" gebunden werden.
Wird dieser Typ momentan unterstützt?