如何将blob及其元数据从一个容器复制到另一个容器,目前blob date的副本设置为当前日期。如何从原始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));
}
}
}
}
}
提前致谢..
答案 0 :(得分:0)
我理解你的问题的方式是你正在寻找两件事:
这应该发生。除非在复制操作期间指定元数据,否则应将源blob的元数据复制到目标blob。来自Copy Blob
文档:
可选。指定与之关联的用户定义的名称 - 值对 斑点。 如果未指定名称 - 值对,则操作将复制 源blob或文件到目标blob的元数据。 If 指定了一个或多个名称 - 值对,目标blob是 使用指定的元数据创建,并且不会复制元数据 源blob或文件。
我认为这是不可能的。上次修改日期是一个系统属性,在创建/更新blob时会更新。由于复制blob操作在目标处创建新blob,因此它将始终具有上次修改日期作为创建/上次更新的时间。你不能保留它。
<强>更新强>
我可以设置上次写入指定文件的日期和时间 到
是的,你可以。实现此目的的一种方法是在目标blob上设置自定义元数据。它的工作方式是获取源blob的最后修改日期并创建自定义元数据条目(例如SourceBlobLastModified)并将其值设置为源blob的上次修改日期。请注意,如果要将源blob的元数据复制到目标blob,则必须将源blob的每个元数据项作为复制操作的一部分与此新元数据条目一起添加。否则,目标blob将只有一个条目。