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