首页 > 解决方案 > 如何确定 Azure Blob 是否不同于当前文件(C#/.Net Core)?

问题描述

如果将要覆盖的 blob(blob 文件)与当前文件(正在上传的文件)不同,我只想将文件上传到 Azure Blob 存储。

有人对使用 C#/.Net Core 的这个功能有什么建议吗?

标签: c#azurefile.net-coreazure-blob-storage

解决方案


有几种方法可以做到这一点,具体取决于您可以对当前文件执行的操作。

  1. 最简单的方法是直接上传而不用担心它是否会改变。如果相同,它将保留,否则将被新版本替换。

根据您的问题,这可能不适合您。接下来要检查的是blob 属性。您可以让 Blob 存储使用默认值,也可以在上传 Blob 时覆盖它们。

您可以在门户中查看它们,它们将如下所示:

LAST MODIFIED   11/20/2020, 1:28:22 PM
CREATION TIME   7/31/2019, 11:44:55 AM
VERSION ID  -
TYPE    Block blob
SIZE    64 B
ACCESS TIER N/A
ACCESS TIER LAST MODIFIED   N/A
SERVER ENCRYPTED    true
ETAG    0x8D88D820FE0B5E4
CONTENT-TYPE    application/octet-stream
CONTENT-MD5 vfS7mlI8PCeeG2yXyUQ25A==
LEASE STATUS    Unlocked
LEASE STATE Available

要在 C# 中获取它们,请运行BlobProperties properties = await blob.GetPropertiesAsync();

  1. 如果您的新文件是现有文件 + 编辑,那么 LastModified 属性可能足以判断它们是否不同。

  2. 现有文件和新文件的 MD5 哈希值也是一个比较好的选择。哈希不是严格唯一的,但它们通常是唯一的,足以判断文件是否已更改。

  3. 如果您可以控制 Blob 的创建和更新,您还可以选择在 Blob 上设置自定义属性。这将允许您在 blob 上设置一些内容,以便您可以跟踪以查看内容是否已更改。相同的GetPropertiesAsync()方法检索元数据字典,并通过创建 aDictionary<string, string>并将其传递给blob.SetMetadataAsync(metadata);

  4. 绝对最坏的情况是下载现有的 blob 并对两个文档进行比较。除非出于某种原因我绝对必须这样做,否则如果 2-4 对我不起作用,我会选择第一个选项,并且仅将其用作最后的手段。


推荐阅读