【发布时间】:2020-03-27 21:22:01
【问题描述】:
当满足特定条件时,我正在尝试更改容器名称和其中的特定文件。下面的第一个代码工作正常。它可以正确更改容器名称和 blob.name。问题是下面的第二个代码。
下面是我的代码。
string ContainerName = "old-container-name";
string NewContainerName = "new-container-name";
var storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
var blobClient = storageAccount.CreateCloudBlobClient();
var sourcecontainer = blobClient.GetContainerReference(ContainerName);
var destcontainer = blobClient.GetContainerReference(NewContainerName);
destcontainer.CreateIfNotExists(BlobContainerPublicAccessType.Blob);
BlobContinuationToken continuationToken = null;
do
{
var blobsResult = sourcecontainer.ListBlobsSegmented(prefix: "", useFlatBlobListing: true, blobListingDetails: BlobListingDetails.All, maxResults: 1000, currentToken: continuationToken, options: new BlobRequestOptions(), operationContext: new OperationContext());
continuationToken = blobsResult.ContinuationToken;
var items = blobsResult.Results;
foreach (var item in items)
{
string newName = "";
var blob = (CloudBlob)item;
if (blob.Name.Contains("originalfilename"))
newName = blob.Name.Replace("originalfilename", "newfilename");
else
newName = blob.Name;
var targetBlob = destcontainer.GetBlobReference(newName);
targetBlob.StartCopy(blob.Uri);
}
}
while (continuationToken != null);
sourcecontainer.DeleteIfExists();
在我在上面的代码中添加这个条件之前。
if (blob.Metadata["Filename"].Contains("originalfilename"))
{
blob.Metadata["Filename"] = blob.Metadata["Filename"].Replace("originalfilename", "newfilename");
targetBlob.SetMetadata();
}
我能够更改文件的元数据[“filename”],但在检索以前没有发生的文件时遇到错误。我认为我更新元数据的方式是错误的。
以下是错误信息:
异常详细信息:System.Collections.Generic.KeyNotFoundException: 字典中没有给定的键。
关于如何解决这个问题或更改元数据的更好方法的任何提示?
【问题讨论】:
-
您的 Blob 元数据是否包含名称为
Filename的键? -
是的,我们确实使用这个 sn-p 添加了元数据。 CloudBlockBlob blockBlob = container.GetBlockBlobReference(System.Guid.NewGuid().ToString() + "_" + 文件名); blockBlob.Metadata.Add("文件名", 文件名);
标签: c# asp.net azure azure-blob-storage