2016-09-15 29 views
0

如何將blob及其元數據從一個容器複製到另一個容器當前將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

我明白你的問題的方式是,你正在尋找兩件事情:

  • 保留元數據時,斑被從一個帳戶複製到另一個。

這應該發生。除非在複製操作期間指定元數據,否則應將源blob的元數據複製到目標blob。從Copy Blob文檔:

可選。指定與 blob關聯的用戶定義的名稱 - 值對。 如果未指定名稱/值對,則操作會將源數據塊或文件中的元數據複製到目標數據塊 。如果 指定了一個或多個名稱/值對,則將使用指定的元數據創建目標Blob ,並且不會從源文件或文件的 複製元數據。

  • 保留源斑點的在目的地團塊修改的日期。

我不認爲這是可能的。上次修改日期是在創建/更新blob時更新的系統屬性。由於複製blob操作會在目標位置創建一個新的blob,因此它將始終將最後修改日期作爲創建/上次更新的時間。你無法保留這一點。

UPDATE

我可以設置日期和時間指定的文件上次寫入 到

是的,可以。一種方法是通過在目標blob上設置自定義元數據。它的工作方式是獲取源blob的最後修改日期並創建自定義元數據條目(例如SourceBlobLastModified)並將其值設置爲源blob的最後修改日期。請注意,如果您想將源blob的元數據複製到目標blob,則必須將源blob的每個元數據項作爲複製操作的一部分與此新元數據項一起添加。否則,目標blob將只有一個條目。

+0

感謝您的回答......我可以設置指定文件上次寫入日期和時間.. –

+0

更新了我的答案。 HTH。 –

相關問題