检查文件是否存在与Azure功能的blob存储
问题描述:
基于https://ppolyzos.com/2016/12/30/resize-images-using-azure-functions/我有以下C#代码来调整使用Azure函数的图像。检查文件是否存在与Azure功能的blob存储
#r "Microsoft.WindowsAzure.Storage"
using ImageResizer;
using ImageResizer.ExtensionMethods;
using Microsoft.WindowsAzure.Storage.Blob;
public static void Run(Stream inputBlob, string blobname, string blobextension, CloudBlockBlob outputBlob, TraceWriter log)
{
log.Info($"Resize function triggered\n Image name:{blobname} \n Size: {inputBlob.Length} Bytes");
log.Info("Processing 520x245");
/// Defining parameters for the Resizer plugin
var instructions = new Instructions
{
Width = 520,
Height = 245,
Mode = FitMode.Carve,
Scale = ScaleMode.Both
};
/// Resizing IMG
Stream stream = new MemoryStream();
ImageBuilder.Current.Build(new ImageJob(inputBlob, stream, instructions));
stream.Seek(0, SeekOrigin.Begin);
/// Changing the ContentType (MIME) for the resulting images
string contentType = $"image/{blobextension}";
outputBlob.Properties.ContentType = contentType;
outputBlob.UploadFromStream(stream);
}
结果将是一张名为520x245-{blobname}.{blobextension}
的图像。
我希望代码仅在blob容器中不存在结果图像的情况下运行。
如何获取容器上的现有文件?
答
检查您的Blob是否存在于容器中,但是您还需要添加CloudBlobContainer作为输入参数。
CloudBlockBlob existingBlob = container.GetBlockBlobReference(blobName);
,并检查是否存在使用
await existingBlob.ExistsAsync()
答
由于您使用CloudBlockBlob类型绑定outputBlob。你可以使用下面的代码检查这个blob是否存在。
if (outputBlob.Exists())
{
log.Info($"520x245-{blobname}.{blobextension} is already exist");
}
else
{
log.Info($"520x245-{blobname}.{blobextension} is not exist");
//do the resize and upload the resized image to blob
}
目前,Azure函数不允许我们在输出blob绑定中使用CloudBlockBlob。解决方法是在function.json中将方向改为“inout”。之后,我们可以在输出blob绑定中使用CloudBlockBlob。
{
"type": "blob",
"name": "outputBlob",
"path": "mycontainer/520x245-{blobname}.{blobextension}",
"connection": "connectionname",
"direction": "inout"
}
+0
任何更新?你的问题是否解决?如果是的话,请将有用的回复标为答案。如果您还有其他问题,请随时告诉我。 – Amor
为了添加'CloudBlobContainer容器'我相信我需要将它绑定到Azure函数。 我给它配了: '{“type”:“container”,“name”:“folder”,“path”:“media”,“connection”:AzureWebJobsDashboard“,”direction“:”in“} ' 但是没有工作 任何想法如何做到这一点?我google'd的任何文件关于它无济于事。 – maudv
这将为你工作?https://stackoverflow.com/questions/36953126/azure - 功能调整大小 - 图像存储在一个BLOB容器 –
你是对的,我应该先检查文档。似乎你不能绑定一个BlobContainer。 –