如何上传来的Azure Blob存储而不覆盖? [英] How do I upload to Azure Blob storage without overwriting?

查看:400
本文介绍了如何上传来的Azure Blob存储而不覆盖?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

调用UploadFromStream覆盖默认的文件 - 我怎么能保证我只上传一个blob,如果它是不是已经在容器

  CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName);
blockBlob.UploadFromStream(流)
 

解决方案

增加接入条件的code,以便它检查对<一href="http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storageclient.blobproperties.etag.aspx">ETag blob的财产 - 通配符是允许的,所以我们希望只允许上传,如果没有斑点这个名字有什么ETAG(这是说一种迂回的方式,这是否BLOB名称存在)

您获取详情如下一个StorageException。

  CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName);
尝试 {
    blockBlob.UploadFromStream(流,accessCondition:AccessCondition.GenerateIfNoneMatchCondition(*));
}赶上(StorageException前){
    如果(ex.Message.Contains((409)冲突)){
        //处理重复BLOB条件
    }
    扔;
}
 

Calling UploadFromStream overwrites files by default - how can I make sure I only upload a blob if it isn't already in the container?

CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName);
blockBlob.UploadFromStream(stream)

解决方案

Add an access condition to the code so that it checks against the ETag property of the blob - wildcards are allowed, so we want to only allow the upload if no blobs with this name have any etag (which is a roundabout way of saying, does this blob name exist).

You get a StorageException as detailed below.

CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName);
try {
    blockBlob.UploadFromStream(stream, accessCondition: AccessCondition.GenerateIfNoneMatchCondition("*"));
} catch (StorageException ex) {
    if (ex.Message.Contains("(409) Conflict")) {
        // Handle duplicate blob condition
    }
    throw;
}

这篇关于如何上传来的Azure Blob存储而不覆盖?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆