2012-10-23 3 views
8

몇 시간 동안 Azure SDK를 사용하여 만든 blob에 메타 데이터를 설정하려고했습니다. BeginUploadFromStream()을 사용하여 데이터를 비동기 적으로 업로드하면 모든 것이 원활하게 작동합니다. 업로드가 완료되면 해당 URI를 사용하여 BLOB에 액세스 할 수 있으므로 성공적으로 생성됩니다. 설정 한 메타 데이터는 유지되지 않습니다.CloudBlob.SetMetadata를 호출해도 Blob 메타 데이터가 저장되지 않습니다.

(EndUploadFromStream()) 뒤에 메타 데이터를 설정했습니다.

나는 메타 데이터를 내가 documentation을 통해 찾을 수있는 세 가지 방법으로 설정을 시도했다 : 내가 문서에 지정된대로, 푸른에 대한 메타 데이터를 저장 myBlob.SetMetadata()를 호출 메타 데이터를 설정 한 후

// First attempt 
myBlob.Metadata["foo"] = "bar"; 

// Second attempt 
myBlob.Metadata.Add("foo", "bar"); 

//Third attempt 
var metadata = new NameValueCollection(); 
metadata["foo"] = "bar"; 
blob.Metadata.Add(metadata); 

을하지만, 스틱하지 않습니다. 을 호출해도 예외가 발생하지 않습니다.,하지만 새로운 참조를 얻을 때 에는 메타 데이터가 없습니다.

BeginSetMetadata()EndSetMetadata()을 사용하여 메타 데이터를 비동기 적으로 저장하려고 시도했지만 비슷한 결과가 나타납니다.

나는 여기서 뭔가 사소한 것을 놓치고 있다고 생각하기 시작하지만, 5 시간 동안 쳐다 본 후에도 내가 어디로 잘못 가고 있는지 이해할 수 없다.

답변

20

예상대로 SetMetadata가 작동해야합니다. 그러나 BLOB에 대한 참조를 얻는 것만으로는 메타 데이터를 읽을 수 없습니다.

BLOB 참조를 가져온 후 해당 CloudBlob에 FetchAttributes 메서드를 호출해야합니다. 이렇게하면 모든 속성과 메타 데이터가로드되고 이전에 설정 한 메타 데이터에 액세스 할 수 있습니다.

// Get a reference to a blob. 
CloudBlob blob = blobClient.GetBlobReference("mycontainer/myblob.txt"); 

// Populate the blob's attributes. 
blob.FetchAttributes(); 

// Enumerate the blob's metadata. 
foreach (var metadataKey in blob.Metadata.Keys) 
{ 
    Console.WriteLine("Metadata name: " + metadataKey.ToString()); 
    Console.WriteLine("Metadata value: " + blob.Metadata.Get(metadataKey.ToString())); 
} 
+0

내가 그때 의심했던 것처럼 정말 사소한 일이었습니다! 필자는 글쓰기가 문제라는 생각에 너무 집중되어 있었다고 생각합니다. 문제가 글을 읽을 수 있다고 생각조차하지 않았습니다. 고마워, 시간을 많이 절약 했어! –