Azure Storage API" StartCopyFromBlob"

时间:2016-04-18 22:44:49

标签: c# asp.net-mvc azure

我正在尝试将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!";
}

1 个答案:

答案 0 :(得分:1)

我只是发表评论作为答案,以便更容易看到。

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

var mediaBlobContainer = cloudBlobClient.GetContainerReference(cloudBlobClient.BaseUri + "temporarymedia");
mediaBlobContainer.CreateIfNotExists(); 

显然我不应该提供cloudBlobClient.BaseUri,只提供名称temporarymedia

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

但是没有相关的错误消息。希望将来某个时候能够保存另一个Azure新手。