用元数据将Azureblob从一个容器复制到另一个容器

本文关键字:一个 复制 另一个 元数据 Azureblob | 更新日期: 2023-09-27 18:07:15

如何将其元数据从一个容器复制到另一个容器,目前blob日期的副本设置为当前日期。如何从原始blob设置新blob的修改日期?

 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));
                        }
                    }
                    }
                }
            }

Thanks in advance.

用元数据将Azureblob从一个容器复制到另一个容器

我理解你的问题的方式是你在寻找两件事:

  • 当blob从一个帐户复制到另一个帐户时保留元数据

这应该发生。除非在复制操作期间指定元数据,否则源blob的元数据应该复制到目标blob。来自Copy Blob文档:

可选的。对象关联的用户定义的名称-值对blob。如果没有指定名称-值对,操作将进行复制从源blob或文件到目标blob的元数据。指定一个或多个名称-值对,则目标blob为使用指定的元数据创建,并且不会从中复制元数据源blob或文件。

  • 在目标blob中保留源blob的修改日期
我认为这是不可能的。最后修改日期是在创建/更新blob时更新的系统属性。由于复制blob操作在目标创建了一个新的blob,因此它将始终以最后修改日期作为创建/更新的时间。你不能保留它。

可以设置指定文件最后写入的日期和时间

是的,你可以。实现这一目标的一种方法是在目标blob上设置自定义元数据。它的工作方式是获取源blob的最后修改日期,并创建一个自定义元数据条目(例如SourceBlobLastModified),并将其值设置为源blob的最后修改日期。请注意,如果要将源blob的元数据复制到目标blob,则必须将源blob的每个元数据项作为复制操作的一部分与这个新元数据项一起添加。否则目标blob将只有一个条目。