Синхронизировать локальный файл с расположением HTTP-сервера (в Python) - PullRequest
3 голосов
/ 02 октября 2011

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

Я думал, что каждый клиент будет загружать файл при каждом запуске, используя HTTP-заголовок If-Modified-Since с временем файла существующего файла, если таковой имеется.Может кто-нибудь подсказать, как это сделать в python?

Может кто-нибудь предложить альтернативный, простой, способ достижения моей цели?

Ответы [ 3 ]

1 голос
/ 02 октября 2011

Вы можете добавить заголовок с именем ETag, (хэш вашего файла, md5sum или sha256 и т. Д.), Чтобы сравнить, отличаются ли два файла от даты последнего изменения

0 голосов
/ 05 октября 2011

Мне кажется, самое простое решение - разместить файл в Mercurial и использовать Mercurial API для поиска хеша файла, загружая файл, если хеш изменился.Вычислить хеш можно как ответ на этот вопрос ;для скачивания файла urllib будет достаточно.

0 голосов
/ 02 октября 2011

Я предполагаю кое-что прямо сейчас, НО .. Одним из решений было бы иметь отдельный HTTP-файл на сервере (check.php), который создает хэш / контрольную сумму каждого файла, который вы размещаете. Если файлы отличаются от локальных файлов, клиент загрузит файл. Это означает, что если содержимое файла на сервере изменится, клиент заметит это изменение, поскольку контрольная сумма будет отличаться.

создайте MD5-хэш содержимого файла, поместите его в базу данных или что-то в этом роде и проверьте перед загрузкой.

Ваше решение будет работать, но оно требует, чтобы сервер фактически включил «измененную» дату в заголовок для запроса GET (некоторые серверные программы этого не делают).

Я бы сказал, создание базы данных, которая выглядит примерно так:

[ID] [File_name] [File_hash]

0001 moo.txt asd124kJKJhj124kjh12j

...