3

我有一个 HTTP 服务器,它托管一些大文件,并有下载它的 python 客户端(GUI 应用程序)。
我希望客户端仅在需要时才下载文件,但每次运行时都有一个最新文件。

我认为每个客户端都会在每次运行时使用 If-Modified-Since HTTP 标头和现有文件的文件时间(如果有)下载文件。有人可以建议如何在 python 中做到这一点吗?

有人可以建议一种替代的、简单的方法来实现我的目标吗?

4

3 回答 3

1

您可以添加一个名为ETag, (文件的哈希,md5sum 或 sha256 等)的标题,以比较两个文件是否不同而不是最后修改日期

于 2011-10-02T01:09:54.313 回答
0

我现在假设一些事情,但是.. 一种解决方案是在服务器上拥有一个单独的 HTTP 文件 (check.php),它会为您托管的每个文件创建一个哈希/校验和。如果文件与本地文件不同,则客户端将下载该文件。这意味着如果服务器上的文件内容发生变化,客户端会注意到变化,因为校验和会有所不同。

对文件内容进行 MD5 哈希,将其放入数据库或其他东西中,并在下载任何内容之前对其进行检查。

您的解决方案可以,但它需要服务器在 GET 请求的标头中实际包含“修改”日期(某些服务器软件不这样做)。

我会说建立一个看起来像这样的数据库:

[ID] [文件名] [文件哈希]

0001 moo.txt asd124kJKJhj124kjh12j

于 2011-10-02T00:49:35.930 回答
0

在我看来,最简单的解决方案是在 mercurial 中托管文件并使用 mercurial api 查找文件的哈希,如果哈希发生更改则下载文件。计算哈希可以作为这个问题的答案;下载文件urllib就足够了。

于 2011-10-04T22:08:18.337 回答