0

Ich spiele mit Azure-Funktionen und Bildmanipulation und gebe sie dann in einem separaten Blob-Container aus.Azure-Funktionen Bildgröße ändern Inhaltstyp

ich es geschafft, diese „offizielle“ Beispiel auf Github zu finden https://github.com/Azure/azure-webjobs-sdk-templates/blob/dev/Functions.Templates/Templates/ImageResizer-CSharp/run.csx

using ImageResizer; 

public static void Run(
    Stream image,       // input blob, large size 
    Stream imageSmall, Stream imageMedium) // output blobs 
{ 
    var imageBuilder = ImageResizer.ImageBuilder.Current; 
    var size = imageDimensionsTable[ImageSize.Small]; 

    imageBuilder.Build(
     image, imageSmall, 
     new ResizeSettings(size.Item1, size.Item2, FitMode.Max, null), false); 

    image.Position = 0; 
    size = imageDimensionsTable[ImageSize.Medium]; 

    imageBuilder.Build(
     image, imageMedium, 
     new ResizeSettings(size.Item1, size.Item2, FitMode.Max, null), false); 
} 

public enum ImageSize 
{ 
    ExtraSmall, Small, Medium 
} 

private static Dictionary<ImageSize, Tuple<int, int>> imageDimensionsTable = new Dictionary<ImageSize, Tuple<int, int>>() 
{ 
    { ImageSize.ExtraSmall, Tuple.Create(320, 200) }, 
    { ImageSize.Small,  Tuple.Create(640, 400) }, 
    { ImageSize.Medium,  Tuple.Create(800, 600) } 
}; 

Dies wird unter Verwendung einer run.csx Datei, ich bin Codierung in Visual Studio 2017 Preview mit jedoch eine „Azure-Funktionen“ Vorlagenprojekt, das verwendet .cs-Dateien. So ist alles so ziemlich das gleiche in meinem Code, aber ich habe meine Funktion Signatur als

[FunctionName("watermark-func")] 
public static void Run(
    [BlobTrigger("images/{name}", Connection = "myStorage_STORAGE")]Stream image, 
    [Blob("watermarked-images/s-{name}", Connection = "myStorage_STORAGE")]Stream imageSmall, 
    [Blob("watermarked-images/m-{name}", Connection = "myStorage_STORAGE")]Stream imageMedium, 
    TraceWriter log) 

Dieser Code funktioniert wie ein Charme, nimmt es das ankommende Bild, dann auf eine mittlere und kleine Größe ändern, dann speichern zu mein aus Container. Das Problem, das ich habe, ist, dass der Inhaltstyp dieser neu erstellten Bilder auf application/octet-stream gesetzt ist?

Gibt es eine Möglichkeit, den richtigen Typ von image/jpeg anzugeben? Ich habe in sah ein CloudBlockBlob verwenden und die Einstellung der Properties.ContentType = "image/jpeg" wenn Stream imageSmallCloudBlockBlob imageSmall ist jedoch bekomme ich einen Fehler

Kann nicht blob binden Schreibzugriff auf CloudBlockBlob verwenden.

Antwort

4

Wenn die Bindung an einen CloudBlockBlob Sie den richtigen Zugriff auf das Attribut Konstruktor angeben müssen, die ReadWrite in diesem Fall sein muss.

Hier ist ein Beispiel dafür, was Ihr Code wie

[Blob("watermarked-images/s-{name}", FileAccess.ReadWrite, Connection = "myStorage_STORAGE")]CloudBlockBlob imageSmall 
+0

Excellent Dank aussehen würde. Ich war fast da, wie ich ursprünglich hatte '[Blob (" ... ", FileAccess.Write, Connection ...]' –