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 App
Azure-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?
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. –