You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过CloudinaryDotNet删除指定前缀且过期的资源?

解决CloudinaryDotNet中按前缀+创建日期批量删除资源的问题

可行的批量删除实现方案

你可以通过ListResources方法结合参数配置+过滤逻辑来实现需求,同时规避ListResourcesByPrefix的参数限制。以下是完整的代码示例:

using CloudinaryDotNet;
using CloudinaryDotNet.Actions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

public async Task DeleteOldResourcesByPrefix()
{
    var cloudinary = new Cloudinary(new Account("你的云名称", "API密钥", "API密钥"));

    // 定义筛选条件:创建日期早于该时间、public_id以指定前缀开头
    var cutoffDate = new DateTime(2023, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    var targetPrefix = "your-target-prefix/";

    List<string> publicIdsToDelete = new List<string>();
    string nextCursor = null;

    do
    {
        var listParams = new ListResourcesParams
        {
            Prefix = targetPrefix,
            MaxResults = 500, // 单次请求最大返回量(Cloudinary API上限)
            NextCursor = nextCursor
        };

        // 可选:手动添加API参数,让服务端直接过滤创建日期,减少本地处理数据
        listParams.AddParam("created_at[lt]", cutoffDate.ToString("yyyy-MM-ddTHH:mm:ssZ"));

        var resourcesResult = await cloudinary.ListResourcesAsync(listParams);

        // 收集符合条件的public_id(若用了服务端过滤,可直接取所有返回的public_id)
        var filteredIds = resourcesResult.Resources
            .Where(r => r.CreatedAt < cutoffDate)
            .Select(r => r.PublicId)
            .ToList();

        publicIdsToDelete.AddRange(filteredIds);

        nextCursor = resourcesResult.NextCursor;
    } while (!string.IsNullOrEmpty(nextCursor));

    // 批量删除资源(Cloudinary API单次最多删除1000条)
    if (publicIdsToDelete.Any())
    {
        for (int i = 0; i < publicIdsToDelete.Count; i += 1000)
        {
            var batchIds = publicIdsToDelete.Skip(i).Take(1000).ToList();
            var deleteParams = new DeleteResourcesParams(batchIds);
            await cloudinary.DeleteResourcesAsync(deleteParams);
        }
    }
}

针对你疑问的解答

  1. 是否无法同时组合前缀和日期筛选?
    并非如此。你有两种方式实现组合筛选:

    • 本地过滤:用ListResourcesParams.Prefix筛选前缀,再在本地过滤资源的CreatedAt属性;
    • 服务端过滤:通过ListResourcesParams.AddParam手动添加Cloudinary原生API参数(如created_at[lt]),让服务端直接返回同时符合前缀和日期条件的资源,减少本地数据处理量。
  2. ListResourcesByPrefix无法设置MaxResults的问题
    这是CloudinaryDotNet SDK封装的局限性,该方法仅支持零散参数传入,未暴露MaxResults、NextCursor等关键配置项。因此更推荐使用ListResources方法搭配Prefix参数,既能自由配置分页和返回量,也能实现前缀筛选。

内容的提问来源于stack exchange,提问作者jahrentorp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 23:47:32