Azure Functions图像调整内容类型

时间:2017-06-09 09:42:57

标签: c# azure azure-storage-blobs azure-functions imageresizer

我正在玩Azure功能和图像处理,然后输出到单独的blob容器。

我设法找到了这个"官方" github上的示例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) }
};

这是使用run.csx文件,但是我使用&#34; Azure Functions&#34;在Visual Studio 2017 Preview中进行编码。项目模板,使用.cs文件。所以我的代码中的所有内容都非常相似,但我的函数签名为

[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)

这段代码就像一个魅力,它将传入图像,然后调整大小,然后保存到我的容器中。我遇到的问题是这些新创建的图像的内容类型设置为application/octet-stream

我有没有办法指定image/jpeg的正确类型?我已经考虑使用CloudBlockBlob并在Properties.ContentType = "image/jpeg"Stream imageSmall时设置CloudBlockBlob imageSmall,但是我收到了错误

  

无法使用访问写入将Blob绑定到CloudBlockBlob。

1 个答案:

答案 0 :(得分:4)

绑定到CloudBlockBlob时,您需要在属性构造函数中指定正确的访问权限,在这种情况下需要ReadWrite

以下是您的代码看起来像

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