当前位置: 首页 > 知识库问答 >
问题:

在点中的Azure blob容器中软删除blob文件。净核心

刁远
2023-03-14

我想从我的DotNet Core应用程序软删除Azure blob容器内的blob文件。我正在使用“Azure. Storage. Blob”nuget包。我设法从Azure blob容器中永久删除blob文件,但我需要软删除文件,而不是永久删除。我通过Microsoft留档(https://azure.microsoft.com/en-us/blog/soft-delete-for-azure-storage-blobs-ga/)用代码做,我没有得到很多。我已经给出了用于删除blob文件的代码。请建议我如何从代码中软删除文件。

        {
                BlobContainerClient container = new
     BlobContainerClient(blobConnectionString, containerName);
                //Delete Blob
                var response=container.DeleteBlob(blobNamewithFileExtension);
        }   

共有2个答案

严阳成
2023-03-14

正如@gaurav-mantri所提到的,首先应该允许Blob存储帐户级别的策略/设置,然后只能通过代码完成。此外,它不是软删除,它包括创建版本、相同blob的快照

如果尚未通过以下配置完成,则必须首先为blob启用软删除:

// Retrieve a CloudBlobClient object and enable soft delete
CloudBlobClient blobClient = GetCloudBlobClient();
try
{
    ServiceProperties serviceProperties = blobClient.GetServiceProperties();
    serviceProperties.DeleteRetentionPolicy.Enabled = true;
    serviceProperties.DeleteRetentionPolicy.RetentionDays = RetentionDays;
    blobClient.SetServiceProperties(serviceProperties);
}
catch (StorageException ex)
{
    Console.WriteLine("Error returned from the service: {0}", ex.Message);
    throw;
}

软删除的用法:

CloudBlockBlob blockBlob = container.GetBlockBlobReference("HelloWorld");
//Create or update blob
await blockBlob.UploadFromFileAsync(ImageToUpload);
// Snapshot
await blockBlob.SnapshotAsync();
// Delete (including snapshots)
blockBlob.Delete(DeleteSnapshotsOption.IncludeSnapshots);
// Undelete
await blockBlob.UndeleteAsync();
// Recover
Console.WriteLine("\nCopy the most recent snapshot over the base blob:");
IEnumerable<IListBlobItem> allBlobVersions = container.ListBlobs(
                    prefix: blockBlob.Name, useFlatBlobListing: true, blobListingDetails: BlobListingDetails.Snapshots);
CloudBlockBlob copySource = allBlobVersions.First(version => ((CloudBlockBlob)version).IsSnapshot && 
                    ((CloudBlockBlob)version).Name == blockBlob.Name) as CloudBlockBlob;
blockBlob.StartCopy(copySource);

有关更多详细信息,请参阅:

https://docs.microsoft.com/en-us/azure/storage/blobs/soft-delete-blob-overview

https://github.com/Azure-Samples/storage-dotnet-blob-soft-delete

梁丘柏
2023-03-14

但我需要软删除文件,而不是永久删除。

因此,存储SDK(和REST API)中没有软删除blob的方法。只有删除blob操作。

软删除是您在帐户级别设置的内容。正确配置软删除后,无论何时删除blob(使用与您类似的代码),它都将被软删除而不是永久删除,并将根据设置在一段时间内保持软删除状态。

请参阅此链接,了解如何为存储帐户配置blob软删除设置:https://docs.microsoft.com/en-us/azure/storage/blobs/soft-delete-blob-enable?tabs=azure-门户。

 类似资料:
  • 我在Azure中有一个名为的blob容器,其中包含各种文件夹(请参阅下面的快照): 我试图删除快照中显示的标题为“用户”和“上传”的文件夹,但我保留了错误:

  • 我正在构建一个数据管道,我使用了一个azure函数,当blob(一个json文件)被上传到azure容器时触发,然后将数据生成到kafka中,json数据最终将存储在snowflake中。当有人从容器中删除blob时,是否有任何方法可以获取blob的内容,以便我也可以从snowflake中删除已删除blob的属性?我曾考虑使用eventhub,但我对它不太熟悉。

  • 我正在使用 VSTS 利用新的静态网站功能将角度应用部署到 Blob 存储。为此,我使用 任务。由于Angular将在每次构建时为不同的捆绑包创建新文件名,因此我不能只是覆盖旧文件,因此最终会有很多旧文件 不幸的是,我还没有找到合适的任务来做这件事。 如何在重新部署之前使用发布管道删除或清除VSTS中的此容器?

  • 将数据帧中的数据写入路径path=rootcontainer/container1“/”fileName df。重新划分(1)。写格式(“com.databricks.spark.csv”)。选项(“标题”、“true”)。选项(“分隔符”,分隔符)。选项(“quote”,“\u0000”)。模式(SaveMode.Overwrite)。保存(路径) 执行上述命令时,除了在root容器/容器1/文

  • 因为这一天大部分时间都在工作,我想知道这是底层Azure文件系统中的某种同步问题,还是其他一些不可见的问题? 任何建议,故障排除提示等,我们将不胜感激。

  • 我正在寻找一种有效的方法从我的存储帐户中删除blob列表。将有“大量”blob要删除,这些blob分布在“许多”容器中。 Azure存储客户端库是否提供任何机制来删除