使用Azure函数从Azure Blob存储中删除X天以上的文件

时间:2019-07-05 13:16:09

标签: azure azure-functions azure-storage-blobs

我想创建一个Azure函数,该函数在上次修改超过30天时会从azure blob存储中删除文件。 任何人都可以提供帮助或提供文档吗?

3 个答案:

答案 0 :(得分:3)

假设您的存储帐户类型为General Purpose v2 (GPv2)Blob Storage,则实际上您不必自己做任何事情。 Azure存储可以为您做到这一点。

您将使用Blob Lifecycle Management并在那里定义一个策略,以删除超过30天的Blob,Azure存储将为您处理删除问题。

您可以在此处了解更多信息:https://docs.microsoft.com/en-us/azure/storage/blobs/storage-lifecycle-management-concepts

答案 1 :(得分:2)

您可以创建一个Timer Trigger函数,从Blob容器中获取项目列表,并删除与您上次修改日期的条件不匹配的文件。

  1. 创建一个Timer Trigger function
  2. 获取list of blobs using CloudBlobContainer
  3. 将Blob项目投射为正确的类型和check LastModified property
  4. Delete the blob与条件不符。

我希望能回答这个问题。

答案 2 :(得分:1)

我使用HTTP作为触发器,因为您没有指定一个触发器,并且测试起来比较容易,但是对于Timer触发器等,逻辑是相同的。还假设使用C#:

[FunctionName("HttpTriggeredFunction")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
    [Blob("sandbox", Connection = "StorageConnectionString")] CloudBlobContainer container,
    ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    // Get a list of all blobs in your container
    BlobResultSegment result = await container.ListBlobsSegmentedAsync(null);

    // Iterate each blob
    foreach (IListBlobItem item in result.Results)
    {
        // cast item to CloudBlockBlob to enable access to .Properties
        CloudBlockBlob blob = (CloudBlockBlob)item;

        // Calculate when LastModified is compared to today
        TimeSpan? diff = DateTime.Today - blob.Properties.LastModified;
        if (diff?.Days > 30)
        {
            // Delete as necessary
            await blob.DeleteAsync();
        }
    }

    return new OkObjectResult(null);
}

编辑-如何使用Newtonsoft.Json下载JSON文件并反序列化为对象:

public class MyClass
{
    public string Name { get; set; }
}

var json = await blob.DownloadTextAsync();
var myClass = JsonConvert.DeserializeObject<MyClass>(json);