Azure管理中断/部分blob上载

时间:2015-10-11 07:59:44

标签: asp.net azure asp.net-web-api azure-storage azure-mobile-services

我使用以下方式将bobs上传到我的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);

1 个答案:

答案 0 :(得分:4)

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

  1. 文件上传时不会被分成块 - 假设用户正在上传文件而不将其分成块,并且在上传过程中用户关闭浏览器。在这种情况下,不会发生任何事情,因为blob尚未保存在blob存储中。
  2. 文件以块的形式上传 - 大型文件就是这种情况,其中上传是以块的形式进行的。假设上传了一些块的情况,并在该用户终止上载过程之后。在这种情况下,有两种可能的解决方案:
  3. 1)您什么都不做 - 如果您不做任何事情,上传但未提交的块将在7(或14)天后自动被存储服务删除。这种方法的缺点是你会为那些日子支付这些字节。

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

    <强>更新

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

    enter image description here