Azure 管理中断/部分 blob 上传

Din*_*uka 2 asp.net azure azure-storage asp.net-web-api azure-mobile-services

我正在使用以下方式将 bob 上传到我的 azure 云存储。我面临的问题是,如果用户退出 Web 应用程序或上传被中断,部分上传的 blob 仍会保留在存储中。在 Azure 中处理中断的 blob 上传的方法是什么?

代码:

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(cloudString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
container.CreateIfNotExists();
container.SetPermissions(
new BlobContainerPermissions
{
        PublicAccess = BlobContainerPublicAccessType.Blob
 });
CloudBlockBlob blockBlob = container.GetBlockBlobReference(uniqueBlobName);
blockBlob.UploadFromByteArray(f, 0, f.Length);
Run Code Online (Sandbox Code Playgroud)

Gau*_*tri 5

将文件作为块 blob 上传时,有两种可能的情况:

  1. 文件上传时没有分成块- 假设用户正在上传文件而不将其分成块,并且在上传过程中用户关闭浏览器。在这种情况下,不会发生任何事情,因为 blob 尚未保存在 blob 存储中。
  2. 文件分块上传- 大文件分块上传就是这种情况。假设上传一些块并且在该用户终止上传过程之后的场景。在这种情况下,有两种可能的解决方案:

1)你什么都不做- 如果你什么都不做,上传但未提交的块会在 7(或 14)天后被存储服务自动删除。这种方法的缺点是你会为那些日子支付这些字节。

2)您可以以编程方式删除未提交的 blob - 您可以获取容器中未提交的 blob 列表并删除这些 blob。我建议的一件事是,您可以找到一段时间内未修改的未提交 Blob,这样您就不会删除仍在上传的 Blob。

更新

我有机会玩未提交的 blob。当您使用 列出 blob 时BlobListingDetails.UncommittedBlobs,它将返回已提交和未提交的 blob。识别未提交的 blob 的一种方法是检查它的ETag属性。在我的小实验中,我发现在未提交的 blob 的情况下,ETag属性将是nullblob 长度0 bytes

在此处输入图片说明