c# - 如何确定 Azure Blob 是否不同于当前文件(C#/.Net Core)?
问题描述
如果将要覆盖的 blob(blob 文件)与当前文件(正在上传的文件)不同,我只想将文件上传到 Azure Blob 存储。
有人对使用 C#/.Net Core 的这个功能有什么建议吗?
解决方案
有几种方法可以做到这一点,具体取决于您可以对当前文件执行的操作。
- 最简单的方法是直接上传而不用担心它是否会改变。如果相同,它将保留,否则将被新版本替换。
根据您的问题,这可能不适合您。接下来要检查的是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();
如果您的新文件是现有文件 + 编辑,那么 LastModified 属性可能足以判断它们是否不同。
现有文件和新文件的 MD5 哈希值也是一个比较好的选择。哈希不是严格唯一的,但它们通常是唯一的,足以判断文件是否已更改。
如果您可以控制 Blob 的创建和更新,您还可以选择在 Blob 上设置自定义属性。这将允许您在 blob 上设置一些内容,以便您可以跟踪以查看内容是否已更改。相同的
GetPropertiesAsync()
方法检索元数据字典,并通过创建 aDictionary<string, string>
并将其传递给blob.SetMetadataAsync(metadata);
绝对最坏的情况是下载现有的 blob 并对两个文档进行比较。除非出于某种原因我绝对必须这样做,否则如果 2-4 对我不起作用,我会选择第一个选项,并且仅将其用作最后的手段。
推荐阅读
- ruby - 更新值为哈希的哈希
- javascript - 动态上下文菜单 Chrome
- ruby-on-rails - 创建 Jekyll 项目时出错
- python - Tensorflow:对文本数据进行分类
- angular - 如何使用 Angular 5 下载文件?
- reactjs - 对 setState 的多次调用如何批处理到一次调用?
- c++ - glAttribLocation 返回 -1 即使顶点着色器正在积极使用它
- php - 在单个查询中获取具有 2 个外部表的表的 2 个不同行?
- java - 无法从实例或 bean 中获取 @Value
- ionic-framework - jsPDF未定义离子3