2011-10-01 3 views
2

큰 파일을 호스트하고 다운로드 할 수있는 파이썬 클라이언트 (GUI 응용 프로그램)가있는 HTTP 서버가 있습니다.
클라이언트가 필요할 때만 파일을 다운로드하고 각 실행마다 최신 파일이 있어야합니다.HTTP 서버 위치로 로컬 파일 동기화 (파이썬에서)

각 클라이언트가 If-Modified-Since HTTP 헤더를 사용하여 각 파일을 다운로드 할 때 기존 파일의 파일 시간이있는 것으로 생각했습니다. 누군가 파이썬에서 어떻게하는지 제안 할 수 있습니까?

누군가 내 목표를 달성하기위한 대안을 제시 할 수 있습니까?

+0

'rsync'가 대안입니다. –

+0

그래서 이미 GUI 애플리케이션에 파일을 다운로드하는 코드가 있습니까? 우리가 그것을 볼 수 있다면 도움이 될 것입니다. –

+0

Jochen - rsync가 HTTP 서버에 대해 작동하지 않습니다. 파일을 사용할 수없는 경우 현재 코드가 urllib.urlopen (url)입니다 ... –

답변

0

가장 쉬운 해결책은 수은으로 파일을 호스팅하고 수은 API를 사용하여 파일을 찾는 것입니다.파일의 해시. 해시가 변경된 경우 파일을 다운로드합니다. 해시 계산은 the answer to this question으로 수행 할 수 있습니다. 파일을 다운로드하려면 urllib이면 충분합니다.

0

나는 지금 당장 생각하고있다. 그러나 한 가지 해결책은 호스팅하는 각 파일의 해시/체크섬을 만드는 별도의 HTTP 파일 (check.php)을 만드는 것이다. 파일이 로컬 파일과 다른 경우 클라이언트가 파일을 다운로드합니다. 즉, 서버의 파일 내용이 변경되면 체크섬이 달라 클라이언트가 변경 사항을 감지합니다.

파일 내용의 MD5 해시를 데이터베이스에 저장하거나 무언가를 다운로드하기 전에 확인하십시오.

당신의 솔루션은 효과가 있지만 실제로 서버가 GET 요청의 헤더에 "수정 한"날짜를 포함시켜야합니다 (일부 서버 소프트웨어에서는이를 수행하지 않습니다).

내가 좋아하는 뭔가를 보이는 데이터베이스를 넣어 말할 것

:

[ID] [file_name]과 [File_hash]

0001

moo.txt의 asd124kJKJhj124kjh12j

1

당신은 ETag라는 헤더를 추가 할 수 있습니다 , (파일의 해시, md5sum 또는 sha256 등의 해시)를 사용하여 마지막으로 수정 한 날짜 대신 두 파일이 다른지 비교합니다.

+0

표준 HTTP 서버에이 ETag를 추가 할 수 있습니까? –

관련 문제