2016-09-15 8 views
0

blobのメタデータをあるコンテナから別のコンテナにコピーするにはどうすればよいですか?現在、ブロブ日付のコピーは現在の日付に設定されています。どのように私は元のBLOBから新しいBLOBの変更日を設定することができます。メタデータを使用してAzureblobを別のコンテナにコピーする

private void MoveBlobFromThisContainerToBackupContainer(CloudBlobContainer sourceContainer, string sourceDirectory, CloudBlobContainer backupContainer, string backupDirectory, bool isToAddSourceDirectory) 
      { 
       backupContainer.CreateIfNotExists(); 

       var sas = sourceContainer.GetSharedAccessSignature(new SharedAccessBlobPolicy() 
       { 
        SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-15), 
        SharedAccessExpiryTime = DateTime.UtcNow.AddDays(1), 
        Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.Write, 
       }); 

       var blobs = sourceContainer.ListBlobs(); 
       if (sourceDirectory.Trim().Length > 0 && sourceDirectory.ToUpper() != "ALL") 
       { 
        CloudBlobDirectory dir = sourceContainer.GetDirectoryReference(sourceDirectory); 
        blobs = dir.ListBlobs(); 
       } 
       foreach (IListBlobItem sourceBlob in blobs) 
       { 
        if (sourceBlob.GetType() == typeof(CloudBlockBlob)) 
        { 
         CloudBlockBlob srcBlob = (CloudBlockBlob)sourceBlob; 

         string backupBlobName = srcBlob.Uri.Segments[srcBlob.Uri.Segments.Length - 1]; 
         if (sourceDirectory.Length > 0 && isToAddSourceDirectory) backupBlobName = sourceDirectory + "\\" + backupBlobName; 
         if (backupDirectory.Trim().Length > 0) backupBlobName = backupDirectory + "\\" + backupBlobName; 
         lblStatus.ForeColor = Color.Blue; 
         lblStatus.Text = "Blob: " + backupBlobName; 
         CloudBlockBlob targetBlob = backupContainer.GetBlockBlobReference(backupBlobName); 

         if (targetBlob.Exists()) 
         { 
          lblStatus.ForeColor = Color.DarkGray; 
          lblStatus.Text = lblStatus.Text + " already Exists...not copied..."; 
         } 
         else if (srcBlob.Properties.LastModified.Value.DateTime >= dateTimePicker1.Value) 
         { 
          var srcBlockBlobSasUri = string.Format("{0}{1}", srcBlob.Uri.AbsoluteUri, sas); 
          targetBlob.StartCopyFromBlob(new Uri(srcBlockBlobSasUri)); 
         } 
        } 
        } 
       } 
      } 

事前に感謝を...

答えて

0

私はあなたの質問は、あなたが2つのことを探しているされていることを理解する方法:ブロブが別のアカウントからコピーされたときに

  • は、メタデータを保持。

これは起こっているはずです。コピー操作中にメタデータを指定しない限り、ソースblobのメタデータをコピー先blobにコピーする必要があります。 Copy Blobから:

オプション。 ブロブに関連付けられたユーザー定義の名前と値のペアを指定します。 名前と値のペアが指定されていない場合、オペレーションはソースのBLOBまたはファイルのメタデータを宛先のBLOBにコピーします( )。 1つまたは複数の名前と値のペアが指定されている場合、指定されたメタデータで作成された宛先BLOBは で、ソースBLOBまたはファイル からメタデータはコピーされません。

  • 宛先BLOBのソースBLOBの更新日時を保持。

私は考えられません。最終更新日は、blobの作成時または更新時に更新されるシステムプロパティです。コピー・ブロブ操作は宛先に新しいブロブを作成するため、最終更新日は常に作成/最終更新日時となります。あなたはそれを保存することはできません。

UPDATE

私は、指定したファイルが はい、できます

に最後に書き込まれた日付と時刻を設定することができます。これを達成する1つの方法は、ターゲットBLOBにカスタムメタデータを設定することです。それが動作する方法は、ソースblobの最終変更日を取得し、カスタムメタデータエントリ(たとえば、SourceBlobLastModified)を作成し、その値をソースblobの最終変更日に設定することです。ソースblobのメタデータをターゲットblobにコピーする場合は、コピー操作の一部としてソースblobの各メタデータ項目をこの新しいメタデータエントリとともに追加する必要があります。それ以外の場合、ターゲットBLOBには1つのエントリしかありません。

+0

答えをありがとう...指定されたファイルが最後に書き込まれた日時を設定することはできますか? –

+0

私の答えが更新されました。 HTH。 –

関連する問題