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

在.NET Core应用中实现Azure Storage临时文件自动过期

实现Azure Blob Storage临时文件自动删除

当然可以创建指定时间后自动删除的临时文件,Azure Blob Storage提供了更简洁的原生实现方式,无需手动调用HTTP接口。以下是两种推荐方案:

方案一:上传时直接设置Blob过期删除属性

直接在上传配置中指定Blob的过期时间,完成上传后Azure会自动在到期时间删除该文件,这是临时文件场景最直接的做法:

public async Task UploadTemporaryFile(Stream fileStream, string path, TimeSpan expirationTime)
{
    var connectionString = "connection string";
    BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
    BlobContainerClient blobContainerClient = blobServiceClient.GetBlobContainerClient("files");
    BlobClient blobClient = blobContainerClient.GetBlobClient(path);
    fileStream.Position = 0;

    BlobUploadOptions uploadOptions = new BlobUploadOptions();
    
    // 保留你原有的内容类型设置逻辑
    var extension = path.Split(".").LastOrDefault();
    if (!string.IsNullOrEmpty(extension) && MimeTypes.Values.ContainsKey(extension))
    {
        var contentType = MimeTypes.Values[extension];
        uploadOptions.HttpHeaders = new BlobHttpHeaders { ContentType = contentType };
    }

    // 设置自动删除的过期时间:当前UTC时间加上指定时长
    uploadOptions.Properties = new BlobProperties
    {
        ExpiresOn = DateTimeOffset.UtcNow.Add(expirationTime)
    };

    await blobClient.UploadAsync(fileStream, uploadOptions);
}

调用示例(创建1小时后自动删除的文件):

await UploadTemporaryFile(fileStream, "temp/report.pdf", TimeSpan.FromHours(1));

方案二:配置容器级生命周期管理规则

如果你的临时文件都存放在特定路径(比如temp/前缀下),可以给容器配置全局生命周期规则,自动清理符合条件的Blob,适合批量管理临时文件的场景:

代码配置规则示例

public async Task SetupTemporaryFileCleanupRule()
{
    var connectionString = "connection string";
    BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
    BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient("files");

    var lifecycleRules = new List<ManagementPolicyRule>
    {
        new ManagementPolicyRule
        {
            Name = "AutoDeleteTempFiles",
            Filter = new ManagementPolicyFilter
            {
                PrefixMatch = new List<string> { "temp/" }, // 匹配临时文件路径前缀
                BlobTypes = new List<string> { "blockBlob" }
            },
            Actions = new ManagementPolicyAction
            {
                BaseBlob = new ManagementPolicyBaseBlob
                {
                    Delete = new ManagementPolicyBaseBlobDelete
                    {
                        DaysAfterModificationGreaterThan = 1.0/24 // 1小时换算为天
                    }
                }
            }
        }
    };

    await containerClient.SetManagementPolicyAsync(new ManagementPolicy(lifecycleRules));
}

关于你当前更新代码的说明

你手动通过SAS+HttpClient设置过期的方式过于繁琐,且存在不必要的复杂操作:

  • Azure.Storage.Blobs SDK已经封装了所有Blob属性配置操作,无需手动构造HTTP请求
  • 手动解析连接字符串获取账号信息属于冗余操作,BlobServiceClient已内置处理逻辑
  • 所用的x-ms-expiry-time等头部是旧版API用法,最新SDK直接通过属性配置即可实现需求

内容的提问来源于stack exchange,提问作者A. Gladkiy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:55:08