当前位置: 首页 > 知识库问答 >
问题:

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

岳卓君
2023-03-14

我想创建一个Azure函数,当上次修改时间超过30天时,从azure blob存储中删除文件。有人能帮忙或者有文档来做吗?

共有3个答案

陆正德
2023-03-14

我使用了HTTP作为触发器,因为您没有指定一个触发器,这更容易测试,但对于定时器触发器等,逻辑是相同的。还假设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);
}

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

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

var json = await blob.DownloadTextAsync();
var myClass = JsonConvert.DeserializeObject<MyClass>(json);
彭硕
2023-03-14

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

  1. 创建计时器触发函数。
  2. 使用 CloudBlobContainer 获取 Blob 列表。
  3. 将 Blob 项强制转换为正确的类型,并检查“上次修改时间”属性。
  4. 删除与条件不匹配的 Blob。

我希望这回答了这个问题。

易炳
2023-03-14

假设存储帐户的类型是常规用途 v2 (GPv2)Blob 存储,则实际上无需自行执行任何操作。Azure 存储可以为你执行此操作。

您将使用< code>Blob生命周期管理并在那里定义一个策略来删除超过30天的Blob,Azure Storage将为您处理删除事宜。

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

 类似资料:
  • 问题内容: 我想从数据库中的特定表中删除所有时间戳超过180天的行。 我已经试过了: 但这会删除所有行,而不仅仅是删除六个月以上的行。 我在on_search表中有一列称为search_date,其中包含创建该行的时间。 问题答案:

  • 如何删除azure blob存储中的文件夹。当我试图删除文件夹时,我看到以下错误: com.azure.storage.blob.models.BloStorageExctive:状态代码409,"在非空目录上不允许进行此操作。请求ID:195b3f66-601e-0071-2edb-094790000000时间:2022-01-15T06:47:55.8443865Z" 在sun.reflect

  • 问题内容: 关于如何删除所有30天以上的行有很多问题,但是我找不到与我相同的东西,因此我可以修复它 我需要删除一些超过30天的邮件记录,带有日期的列名称命名为sendOn,并且该列中的行看起来像这样2018-01-12 12:25:00我应该如何格式化查询从表中删除包含30天以上的所有记录? 这会工作吗? 编辑:上面的查询工作,但非常非常慢以任何方式使其更快?我试过了now()但它给出了函数错误的

  • 问题内容: 我需要创建一个报告,在其中我需要减去两个日期并以%H:%M%S的形式返回 这是我插入到列表中的减法: 此列表返回到> 在csv Final_ReportX中,它以以下格式保存:0天00:05:39 我需要它只返回00:05:39,没有几天。 *不是正则表达式 谢谢! 问题答案: 您可以使用将timedelta转换为H:M:S字符串的自定义函数: 参考

  • 我正在尝试做一个Java线程,这个线程必须从一个MySQL数据库中删除所有的记录,超过7天。 在我的表中,我有一列包含如下日期:。

  • 我想通过运行在Azure VM上的FTP服务器与用户共享Azure Blob存储中的文件。 据我所知,您不能在VM上挂载Blob存储,但可以使用“网络使用”挂载Azure文件共享。 Blob存储上的文件将以增量方式上载,因此理想情况下,我希望在上载时将其复制到Azure文件,Azure功能似乎是理想的方式,因为它们很容易为我设置和处理Blob存储上的触发器。 我如何使用Azure功能将文件从Blo