#c# #azure #file #.net-core #azure-blob-storage
#c# #azure #файл #.net-core #azure-blob-хранилище
Вопрос:
Я хочу загрузить файл в хранилище больших двоичных объектов Azure только в том случае, если большой двоичный объект, который он будет перезаписывать (файл больших двоичных объектов), отличается от текущего файла (загружаемого).
Есть ли у кого-нибудь какие-либо предложения по этой функциональности с использованием C # / .Net Core?
Ответ №1:
Есть несколько способов сделать это в зависимости от того, что вы можете сделать с текущим файлом.
- Самый простой способ — просто загрузить файл, не беспокоясь о том, изменится он или нет. Если это то же самое, оно останется, если нет, оно будет заменено новой версией.
Исходя из вашего вопроса, это, вероятно, не вариант для вас. Следующее, что нужно проверить, — это свойства больших двоичных объектов. Вы можете разрешить хранилищу больших двоичных объектов использовать значения по умолчанию или переопределить их при загрузке большого двоичного объекта.
Вы можете взглянуть на них на портале, и они будут выглядеть примерно так:
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-хэш существующего и нового файла также является хорошим выбором для сравнения. Хэши не являются строго уникальными, но обычно они достаточно уникальны, чтобы определить, был ли изменен файл.
- Если вы контролируете создание большого двоичного объекта, а также его обновление, у вас также есть возможность задать пользовательские свойства для большого двоичного объекта. Это позволило бы вам установить что-то в большом двоичном объекте, что вы могли бы отслеживать, чтобы увидеть, изменилось ли содержимое. Тот же
GetPropertiesAsync()
метод извлекает словарь метаданных, и его настройка выполняется путем созданияDictionary<string, string>
и передачи его вblob.SetMetadataAsync(metadata);
- Абсолютным наихудшим случаем была бы загрузка существующего большого двоичного объекта и выполнение сравнения двух документов. Если бы не было какой-то причины, по которой я должен был это сделать, если бы 2-4 не сработали для меня, я бы выбрал первый вариант и использовал его только в крайнем случае.