2016-09-15 11 views
0

Как копировать 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 вещи:

  • сохранить метаданные при блоб копируется с одного счета на другой ,

Это должно происходить. Если вы не укажете метаданные во время операции копирования, метаданные исходного блока должны быть скопированы в блокнот назначения. От Copy Blob документация:

Дополнительно. Задает определяемую пользователем пару имя-значение, связанную с блоком . Если пары имен и значений не указаны, операция копирует метаданные из исходного блоба или файла в блок назначения. Если указана одна или несколько пар имя-значение, то блоком назначения является , созданный с указанными метаданными, а метаданные не копируются из исходного блоба или файла.

  • сохранить измененную дату исходного сгустка в целевом сгустка.

Я не думаю, что это возможно. Дата последнего изменения - это системное свойство, которое обновляется по мере создания/обновления blob. Поскольку операция copy blob создает новую ячейку в месте назначения, она всегда будет иметь последнюю измененную дату как время ее создания/последнего обновления. Вы не можете это сохранить.

UPDATE

может я установить дату и время, что указанный файл последней записи в

Да, вы можете. Один из способов добиться этого - установить настраиваемые метаданные в целевом блобе. То, как это будет работать, - это получить последнюю измененную дату исходного блога и создать пользовательскую запись метаданных (например, SourceBlobLastModified) и установить ее значение на последнюю измененную дату исходного блоба. Обратите внимание, что если вы хотите скопировать метаданные исходного блока в целевой блок, вы должны добавить каждый элемент метаданных исходного блока как часть операции копирования вместе с этой новой записью метаданных. В противном случае целевой блок будет иметь только одну запись.

+0

Спасибо за ответ ... Могу ли я установить дату и время, когда указанный файл был записан в последний раз. –

+0

Обновлен мой ответ. НТН. –