2011-10-01 64 views
2

我有一個HTTP服務器,它託管一些大文件並具有下載它的python客戶端(GUI應用程序)。
我希望客戶端只在需要時下載文件,但每次運行時都要有最新的文件。與HTTP服務器位置同步本地文件(在Python中)

我想每個客戶端都會在每次運行時使用If-Modified-Since HTTP標頭和現有文件的文件時間(如果有)下載文件。有人可以建議如何在Python中做到這一點?

有人可以提出一種替代的,簡單的方法來實現我的目標嗎?

+0

'rsync'是一種替代方案。 –

+0

所以你有一些代碼已經下載你的GUI應用程序中的文件?如果我們能看到它會有所幫助。 –

+0

Jochen-rsync不支持HTTP服務器,不是嗎? Rob-我的當前代碼只是urllib.urlopen(url),如果文件不可用... –

回答

0

在我看來,最簡單的解決方案是託管文件在mercurial中,並使用mercurial api找到文件的散列,如果散列已更改,則下載該文件。 計算哈希可以做爲the answer to this question;下載文件urllib就足夠了。

0

我假設現在有些事情,但.. 一個解決方案是在服務器上有一個單獨的HTTP文件(check.php),它會爲您託管的每個文件創建一個散列/校驗和。如果文件與本地文件不同,則客戶端將下載該文件。這意味着如果服務器上文件的內容發生變化,客戶端將會注意到這種變化,因爲校驗和會有所不同。

做一個文件內容的MD5散列,把它放在數據庫或其他東西,並在下載任何東西之前檢查它。

您的解決方案可能會工作,但它要求服務器實際在GET請求的標題中包含「修改」日期(某些服務器軟件不執行此操作)。

我想說搭,看起來像一個數據庫:

[ID] [文件名] [File_hash]

0001 moo.txt asd124kJKJhj124kjh12j

1

您可以添加一個名爲ETag頭,(你的文件的散列,md5sum或sha256等),比較兩個文件是不同的,而不是最後修改日期

+0

我可以將此ETag添加到標準HTTP服務器嗎? –

相關問題