How to delete a blob using Azure Functions?

2019-04-25 08:14发布

I am creating an Azure function that triggers when an image is uploaded or added to a particular Azure Storage, and it does the following: 1.) Resize the image 2.) Put the image to correct directory (using Output binding) 3.) Delete the original blob image that was added to Azure Storage after processing.

I am done with steps 1 and 2 in the process, but I'm finding less to no documentation about deleting a blob or an API that would expose methods for Azure Storage. (Using C#)

Here's the sample code:

#r "System.Drawing"
using System;
using ImageResizer;
using System.Drawing;
using System.Drawing.Imaging;

public static void Run(Stream inputImage, string imageName, Stream resizedImage, TraceWriter log)
{
    // Log the file name and size
    log.Info($"C# Blob trigger function Processed blob\n Name:{imageName} \n Size: {inputImage.Length} Bytes");

    // Manipulate the image
    var settings = new ImageResizer.ResizeSettings
    {
        MaxWidth = 400,
        Format = "png"
    };

    ImageResizer.ImageBuilder.Current.Build(inputImage, resizedImage, settings);

    // Delete the Raw Original Image Step
}

3条回答
2楼-- · 2019-04-25 08:21

To delete a blob, you need to

var container = blobClient.GetContainerReference(containerName);
var blockBlob = container.GetBlockBlobReference(fileName);
return blockBlob.DeleteIfExists();

Make sure that your close all streams before you try this so the image is no longer in use.

查看更多
狗以群分
3楼-- · 2019-04-25 08:33

Be sure to have the right references imported:

#r "Microsoft.WindowsAzure.Storage"
using Microsoft.WindowsAzure.Storage.Blob;

Then you can use CloudBlockBlob as the parameter type and delete it:

public static void Run(CloudBlockBlob myBlob, string name, TraceWriter log)
{
    myBlob.DeleteIfExists();
}
查看更多
Rolldiameter
4楼-- · 2019-04-25 08:34

You can use several input types to your function when you use C#, here's the webjobs sdk cheat sheet detailing most of the available ones.

In your case, you could request your input image as a CloudBlockBlob, which has a delete method. You can call this inside the resizing function or in a separately triggered function to delete the completed blobs. You may need to change your binding direction to inout, see here.

There's no binding to do automatic cleanup at present.

查看更多
登录 后发表回答