我想创建一个Azure函数,该函数在上次修改超过30天时会从azure blob存储中删除文件。 任何人都可以提供帮助或提供文档吗?
答案 0 :(得分:3)
假设您的存储帐户类型为General Purpose v2 (GPv2)
或Blob Storage
,则实际上您不必自己做任何事情。 Azure存储可以为您做到这一点。
您将使用Blob Lifecycle Management
并在那里定义一个策略,以删除超过30天的Blob,Azure存储将为您处理删除问题。
您可以在此处了解更多信息:https://docs.microsoft.com/en-us/azure/storage/blobs/storage-lifecycle-management-concepts。
答案 1 :(得分:2)
您可以创建一个Timer Trigger函数,从Blob容器中获取项目列表,并删除与您上次修改日期的条件不匹配的文件。
我希望能回答这个问题。
答案 2 :(得分:1)
我使用HTTP作为触发器,因为您没有指定一个触发器,并且测试起来比较容易,但是对于Timer触发器等,逻辑是相同的。还假设使用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);
}
编辑-如何使用Newtonsoft.Json
下载JSON文件并反序列化为对象:
public class MyClass
{
public string Name { get; set; }
}
var json = await blob.DownloadTextAsync();
var myClass = JsonConvert.DeserializeObject<MyClass>(json);