2016-11-17 3 views
0

Я написал вызов для загрузки файла внутри boto3 bucket. В вызове вам необходимо передать имя файла, ведро. Затем он загрузит файл в ведро. Тем не менее, я пытаюсь добавить версии для каждого файла, загруженного в ведро. Поэтому для достижения этого я включил управление версиями для своего ковша; который затем дал мне версии для файлов, которые я загрузил в это ведро.boto3 версия и добавление, если внесены изменения в файл

bucketFile = s3.meta.client.upload_file(filename, str(bucket),filename) 

Затем, чтобы получить версию объекта этого файла я загрузил, я следующий

objectSummary = s3.ObjectSummary(bucket,filename) 
object = objectSummary.get() 
versionID = object.get('VersionId') 

Следующий код дает мне Version-идентификатор для каждого файла, который я загрузить на это ведро. Так что я пытаюсь сделать, это ---> Получить версию для файла ----> Добавить эту версию в моей локальной базе данных, как этот

versionsAdd = versions(version_url=versionID, filename=filename) 

Однако трудная часть для меня является то, что , Я не хочу добавлять эту версию, если содержимое файла остается таким же. boto3 дает мне versionID независимо от содержимого файла. Поэтому для меня я хочу иметь возможность читать файл и сравнивать его с моим существующим файлом в своем ковше. Если в файле внесены изменения, я бы только хотел добавить его под мою версию в локальной базе данных. Если файл, загруженный в ведро, остается тем же самым содержимым -> просто пропустите это и не добавьте в мою локальную базу данных.

ответ

1

Вы можете использовать ETag, связанный с объектом в Amazon S3, для сравнения объектов и определения их идентичности. Это контрольная сумма MD5 содержимого объекта.

Если новая версия имеет тот же ETag, что и предыдущая версия, просто пропустите ее.

+0

Oh! Итак, одному и тому же файлу присваивается тот же ETAG? – Dilli

+0

Да. ETag - контрольная сумма MD5 содержимого. –

+0

Life saver! Спасибо огромное! – Dilli