Как определить, отличается ли большой двоичный объект Azure от текущего файла (C#/.Net Core)?

Я хочу загрузить файл в хранилище BLOB-объектов Azure только в том случае, если большой двоичный объект, который он будет перезаписывать (файл большого двоичного объекта), отличается от текущего файла (тот, который загружается).

Есть ли у кого-нибудь предложения по этой функциональности с использованием С#/.Net Core?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
446
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть несколько способов сделать это в зависимости от того, что вы можете сделать с текущим файлом.

  1. Самый простой способ - просто загрузить, не беспокоясь о том, изменится он или нет. Если это то же самое, оно останется, если нет, оно будет заменено новой версией.

Исходя из вашего вопроса, это, вероятно, не вариант для вас. Следующее, что нужно проверить, это свойства большого двоичного объекта. Вы можете разрешить хранилищу 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. Если вы управляете созданием большого двоичного объекта, а также его обновлением, у вас также есть возможность задать пользовательские свойства для большого двоичного объекта. Это позволит вам установить что-то в большом двоичном объекте, что вы сможете отслеживать, чтобы увидеть, изменилось ли содержимое. Тот же метод GetPropertiesAsync() извлекает словарь метаданных, и его настройка выполняется путем создания Dictionary<string, string> и передачи его в blob.SetMetadataAsync(metadata);

  4. Абсолютно худшим случаем будет загрузка существующего большого двоичного объекта и сравнение двух документов. Если нет какой-либо причины, по которой мне абсолютно необходимо это сделать, если бы 2-4 не сработали для меня, я бы выбрал первый вариант и использовал его только в крайнем случае.

Другие вопросы по теме