【问题标题】:CloudPageBlob StartCopyAsync Fails with status 404CloudPageBlob StartCopyAsync 失败,状态为 404
【发布时间】:2017-01-11 23:11:03
【问题描述】:

我遇到了一个问题,我试图将 CloudPageBlob 复制到另一个 Azure 订阅中的存储帐户。出于某种原因,当我调用复制时,我不断收到 404 错误:

CloudBlobContainer destContainer;
CloudBlob sourceBlob;
string destBlobName;

var sourcePageBlob = sourceBlob as CloudPageBlob;
if (sourcePageBlob != null)
{
    var destBlob = destContainer.GetPageBlobReference(destBlobName);
    await destBlob.StartCopyAsync(sourcePageBlob, AccessCondition.GenerateIfExistsCondition(), AccessCondition.GenerateEmptyCondition(), new BlobRequestOptions(), new OperationContext());
    return destBlob;
}

调用返回{"The remote server returned an error: (404) Not Found."} 但是,如果我调用sourcePageBlob.Exists(),它会返回true

【问题讨论】:

  • 你的 destContainer 存在吗? 404错误可能是由于这个原因。此外,由于您指定了 AccessCondition.GenerateIfExistsCondition(),我认为 destBlob 也需要存在。为什么不删除此访问条件?
  • 能否请您检查源容器ACL?是Private吗?
  • 是的,源容器是私有的。那应该有关系吗?我有一个访问密钥,并且能够对源容器执行操作。

标签: azure azure-blob-storage


【解决方案1】:

拥有一个私有源容器是个问题。您需要获取一个共享访问 URI,该 URI 将允许目标存储帐户访问源帐户。这篇博文解释了它:https://alexandrebrisebois.wordpress.com/2013/06/25/copy-blobs-with-startcopyfromblob-and-track-its-progression-using-copystate/

CloudBlobContainer destContainer;
CloudBlob sourceBlob;
string destBlobName;

var sharedAccessUri = GetShareAccessUri(sourceBlob);
var sourcePageBlob = sourceBlob as CloudPageBlob;
if (sourcePageBlob != null)
{
    var destBlob = destContainer.GetPageBlobReference(destBlobName);
    await destBlob.StartCopyAsync(new Uri(sharedAccessUri));
    return destBlob;
}

private string GetShareAccessUri(CloudBlob sourceBlob)
{
  int validMins = 300;
  var policy = new SharedAccessBlobPolicy
  {
    Permissions = SharedAccessBlobPermissions.Read,
    SharedAccessStartTime = null,
    SharedAccessExpiryTime = DateTimeOffset.Now.AddMinutes(validMins)
  };

  var sas = sourceBlob.GetSharedAccessSignature(policy);
  return sourceBlob.Uri.AbsoluteUri + sas;
}

【讨论】:

    猜你喜欢
    • 2022-11-13
    • 2013-04-10
    • 2023-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2020-03-26
    • 1970-01-01
    • 2018-06-20
    相关资源
    最近更新 更多