如何在Azure blob存储中设置文件的时间戳/过期时间

vbopmzt1  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(140)

我正在使用以下代码将文件上传到blob存储。对于给定的文件,我想设置过期时间。之后,系统将自动删除文件。

[HttpPost("UploadFile")]
public async Task<IActionResult> UploadFile([FromForm] IFormFile file)
{
    if (file == null || file.Length <= 0)
        return BadRequest("File is required.");

    try
    {
        // Create a unique filename to avoid conflicts
        string fileName = Guid.NewGuid().ToString() + "_" + file.FileName;

        // Upload the file to Azure Blob Storage
        BlobServiceClient blobServiceClient = new BlobServiceClient(_connectionString);
        BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(_containerName);
        BlobClient blobClient = containerClient.GetBlobClient(fileName);

        using (var stream = file.OpenReadStream())
        {
            await blobClient.UploadAsync(stream, overwrite: true);
        }

        // Set the retention policy for the blob (30 days)
        var metadata = new Dictionary<string, string>
        {
            { "retention-days", "30" }
        };

        await blobClient.SetMetadataAsync(metadata);

        return Ok("File uploaded successfully.");
    }
    catch (Exception ex)
    {
        return StatusCode(500, $"An error occurred: {ex.Message}");
    }
}

字符串
有了这个代码,我可以上传文件,但在设置保留期时出现错误“The metadata specified is invalid. It has characters that are not permitted”。
我也试过这段代码,但得到了同样的错误:

BlobProperties properties = await blobClient.GetPropertiesAsync();
            properties.Metadata.Add("retention-days", "30");
            await blobClient.SetMetadataAsync(properties.Metadata);

如何确保在X天后能够删除azure blob存储中的文件?

wydwbb8l

wydwbb8l1#

如果您参考此处获取元数据键的允许命名。“-”不是允许使用的字符,因此您会收到错误消息。
如果您参考this文档,它指出您需要使用的元数据是“RetentionDays”。我已经成功地测试了元数据更新,但是我还没有测试基于该元数据的blob的自动删除。您可以自己测试,然后关闭或评论此问题。
此外,您还将上传blob,然后设置元数据。您可以在一个步骤中完成此操作。请参阅this现有SO答案,了解如何执行此操作。

相关问题