2016-09-15 28 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。 –

相关问题