Функции Azure Изображение изменить размер Тип содержимого

Я играю с функциями 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 файл, однако я пишу в Visual Studio 2017 Preview, используя шаблон проекта "Функции Azure", который использует файлы.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 ответ

Решение

При привязке к CloudBlockBlob вам нужно указать правильный доступ в конструкторе атрибута, который должен быть ReadWrite в этом случае.

Вот пример того, как ваш код будет выглядеть

[Blob("watermarked-images/s-{name}", FileAccess.ReadWrite,  Connection = "myStorage_STORAGE")]CloudBlockBlob imageSmall
Другие вопросы по тегам