检查文件是否存在与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() 
+0

为了添加'CloudBlobContainer容器'我相信我需要将它绑定到Azure函数。 我给它配了: '{“type”:“container”,“name”:“folder”,“path”:“media”,“connection”:AzureWebJobsDashboard“,”direction“:”in“} ' 但是没有工作 任何想法如何做到这一点?我google'd的任何文件关于它无济于事。 – maudv

+0

这将为你工作?https://*.com/questions/36953126/azure - 功能调整大小 - 图像存储在一个BLOB容器 –

+0

你是对的,我应该先检查文档。似乎你不能绑定一个BlobContainer。 –

由于您使用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