在将流写入blob直到完成时租用blob

时间:2012-10-06 19:30:30

标签: azure azure-storage azure-storage-blobs

我想在向它写入流时租用blob直到它完成。以下代码:

情景1:

  blob.AcquireLease();
  blob.UploadText("Content");
  blob.Release();

如果我首先获取blob上的租约,则需要上传的内容会抛出异常,因为blob已被锁定。

情景2:

  blob.uploadText("Content");
  blob.AcquireLease();
  blob.Release();

由于我将内容同步上传到blob,blob.AcquireLease()语句只有在上传完成时才会执行。如果是这样的话就会有这个优势。

  1. 基本上我正在寻找建议,我可以在开始上传内容之前锁定/租用blob,并在上传完成时释放锁定。
  2. 我们只能租用blob 90秒(默认情况下)。如果blob.upload需要90秒以上(考虑文件大小为100MB),我想知道如何继续更新租约,直到上传完成。

1 个答案:

答案 0 :(得分:3)

如果您拥有租约,则只能修改租借的blob。这意味着您必须将租约与您的请求一起通过。

像这样的代码应该有用(警告:未测试,甚至编译):

var leaseId = blob.AcquireLease();
blob.UploadText("Content", Encoding.UTF8, AccessCondition.GenerateLeaseCondition(leaseId), null);
blob.ReleaseLease(AccessCondition.GenerateLeaseCondition(leaseId));

想一想,上面的代码是否正常工作? ReleaseLease至少需要一个参数,不是吗?

对于您的第二个问题,我认为默认情况下租约最多为60(不是90)秒。在存储客户端库支持租约之前,我为此构建了自己的代码,并创建了一个名为AutoRenewLease的类,每隔45秒更新一次租约,以确保我没有丢失它。您可以在https://github.com/smarx/WazStorageExtensions找到代码。类似的东西对你有用。