Функции 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