C# Azure存储API“;StartCopyFromBlob“;

C# Azure存储API“;StartCopyFromBlob“;,c#,asp.net-mvc,azure,C#,Asp.net Mvc,Azure,我试图将一个blob从一个位置复制到另一个位置,但这种方法似乎已经过时。我读过的所有东西都说我应该使用“StartCopy”。但是,当我尝试此操作时,它不会复制blob。我刚在目的地收到一个404错误 我似乎找不到这方面的任何文档。有谁能在最新版本的API中为我提供建议,或者为我指出一些文档的方向 Uri uploadUri = new Uri(destinationLocator.Path); string assetContainerName = uploadUri.Segments[1];

我试图将一个blob从一个位置复制到另一个位置,但这种方法似乎已经过时。我读过的所有东西都说我应该使用“StartCopy”。但是,当我尝试此操作时,它不会复制blob。我刚在目的地收到一个404错误

我似乎找不到这方面的任何文档。有谁能在最新版本的API中为我提供建议,或者为我指出一些文档的方向

Uri uploadUri = new Uri(destinationLocator.Path);
string assetContainerName = uploadUri.Segments[1];
CloudBlobContainer assetContainer =
    cloudBlobClient.GetContainerReference(assetContainerName);
string fileName = HttpUtility.UrlDecode(Path.GetFileName(model.BlockBlob.Uri.AbsoluteUri));

var sourceCloudBlob = mediaBlobContainer.GetBlockBlobReference(fileName);
sourceCloudBlob.FetchAttributes();

if (sourceCloudBlob.Properties.Length > 0)
{
    IAssetFile assetFile = asset.AssetFiles.Create(fileName);
    var destinationBlob = assetContainer.GetBlockBlobReference(fileName);

    destinationBlob.DeleteIfExists();
    destinationBlob.StartCopyFromBlob(sourceCloudBlob);
    destinationBlob.FetchAttributes();
    if (sourceCloudBlob.Properties.Length != destinationBlob.Properties.Length)
        model.UploadStatusMessage += "Failed to copy as Media Asset!";
}

我只是发布我的评论作为答案,让它更容易看到


这不是容器的访问级别。这与
StartCopy
也没有任何关系。结果是这些代码行

var mediaBlobContainer = cloudBlobClient.GetContainerReference(cloudBlobClient.BaseUri + "temporarymedia");
mediaBlobContainer.CreateIfNotExists(); 
显然,我不应该提供
cloudBlobClient.BaseUri
,只提供名称
temporarymedia

var mediaBlobContainer = cloudBlobClient.GetContainerReference("temporarymedia"); 

但是没有相关的错误消息。希望它能在将来的某个时候拯救另一个Azure新手。

该容器是公共容器还是私有容器?如果它是私有的,您可能需要将其更改为公共的。或者,如果希望保持容器私有,可以为此blob创建一个SAS,并使用SAS作为源。可能与此线程重复—不是容器的访问级别。这与StartCopy也没有任何关系。结果是这些代码行
var mediaBlobContainer=cloudBlobClient.GetContainerReference(cloudBlobClient.BaseUri+“temporarymedia”);'
mediaBlobContainer.CreateIfNotExists()显然,我不应该提供cloudBlobClient.BaseUri,而应该提供名称“temporarymedia”<代码>var mediaBlobContainer=cloudBlobClient.GetContainerReference(“临时媒体”)但没有相关的错误消息。希望它能在将来的某个时候为另一个Azure新手节省一些时间。请不要将您的解决方案发布为。这使得其他用户更容易找到答案,并看到您的问题已得到解决。(几天后,您将能够找到您的答案。)