我正在玩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。
答案 0 :(得分:4)
绑定到CloudBlockBlob
时,您需要在属性构造函数中指定正确的访问权限,在这种情况下需要ReadWrite
。
以下是您的代码看起来像
的示例[Blob("watermarked-images/s-{name}", FileAccess.ReadWrite, Connection = "myStorage_STORAGE")]CloudBlockBlob imageSmall