Azure Functions 图像调整大小内容类型

Azure Functions Image resize Content Type

我正在使用 Azure 函数和图像操作,然后输出到一个单独的 blob 容器。

我设法在 github https://github.com/Azure/azure-webjobs-sdk-templates/blob/dev/Functions.Templates/Templates/ImageResizer-CSharp/run.csx

上找到了这个 "official" 示例
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 文件,但是我在 Visual Studio 2017 预览版中使用 "Azure Functions" 项目模板进行编码,该模板使用 .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 并在 Stream imageSmallCloudBlockBlob imageSmall 时设置 Properties.ContentType = "image/jpeg",但是我得到一个错误

Cannot bind blob to CloudBlockBlob using access write.

绑定到 CloudBlockBlob 时,您需要在属性构造函数中指定正确的访问权限,在本例中需要 ReadWrite

这是您的代码的示例

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