将本地文件与HTTP服务器位置同步(Python)
我有一个HTTP服务器,里面存放了一些大文件,还有一些用Python写的客户端(图形界面应用),它们用来下载这些文件。
我希望客户端在需要的时候才下载文件,但每次运行时都能确保文件是最新的。
我想过让每个客户端在每次运行时都下载文件,使用If-Modified-Since这个HTTP头,带上现有文件的时间(如果有的话)。有人能建议我怎么在Python中实现这个吗?
有没有人能推荐一个简单的替代方法来达到我的目标?
3 个回答
0
我现在假设了一些情况,但有一个解决方案是,在服务器上放一个单独的HTTP文件(比如check.php),这个文件会为你托管的每个文件生成一个哈希值或校验和。如果这些文件和本地的文件不一样,客户端就会下载这个文件。这意味着,如果服务器上的文件内容发生了变化,客户端会注意到这个变化,因为哈希值会不同。
你可以对文件内容做一个MD5哈希,把它存到数据库里,下载任何文件之前先和这个哈希值对比一下。
你的方案也可以实现,但需要服务器在GET请求的头信息里包含“修改”日期(有些服务器软件并不会这样做)。
我建议建立一个看起来像这样的数据库:
[ID] [文件名] [文件哈希]
0001 moo.txt asd124kJKJhj124kjh12j
1
你可以添加一个叫做 ETag
的头部信息,它是你文件的一个哈希值,比如 md5sum 或者 sha256 等等。这样可以用来比较两个文件是否不同,而不是依赖最后修改的日期。
0
我觉得最简单的办法是把文件放在Mercurial上,然后用Mercurial的接口来查找这个文件的哈希值。如果哈希值发生了变化,就下载这个文件。计算哈希值的方法可以参考这个问题的答案;至于下载文件,使用urllib
就可以了。