2013-03-03 3 views
3

자바 응용 프로그램에 클라우드 기능을 추가하려고합니다. 클라이언트와 서버에서 파일을 동기화해야합니다. 나는 자바 프로그래밍에 초보자이며, 나는이 경우 availalbe 최고의 옵션을 듣고 싶습니다.자바 클라이언트 서버 파일 동기화 - 가장 간단한 방법

나는

http://jfilesync.sourceforge.net/

https://github.com/quaa/JavaFileSync

http://sourceforge.net/p/lazysync

같은 몇 가지 예제 프로젝트를 시도하지만 서버 부분에 정말 혼란 스러워요. 사실 많은 사용자 계정이있을 것이므로 다른 사용자의 데이터를 저장하기 위해 다른 폴더를 만들어야 할 것입니다. 그래서 이것을 달성하는 가장 좋은 방법은 무엇입니까? FTP 연결 만들기? 또는 http upload?

잘 모르겠습니다. 누구든지 나를 올바른 길로 인도하십시오.

+0

무엇이 당신을 혼란 스합니까? HTTP vs FTP 대 일반 소켓은 정말로 중요하지 않습니다. 단지 하나만 선택하십시오. (비록 내가 FTP에 대해 조언 할 것이지만, 방화벽과 네트워크 터널을 다루는 것이 더 힘들어진다.) – Joni

+0

@Joni, 귀하의 의견에 감사드립니다. 나는 DropBox의 개념을 좋아했다. HTTP를 통해 DropBox 같은 기능을 구현할 수 있습니까? 또는 어떤 것이 더 낫습니까? –

답변

0

이것은 실제로 웹 응용 프로그램에서 일반적입니다. 나는 구체적인 세부 사항이 없기 때문에 생각하고 일반적인 제안을 해 줄 것입니다.

당신이하고 싶지 않은 일은 업로드 한 바이트를 데이터베이스에 저장하는 것입니다. 그것은 가능하지만, 특히 사람들이 임의의 크기의 파일을 업로드 할 수있는 곳에서는 잘 수행하는 것이 매우 어렵습니다. 전에이 너트에 금이 간다면, 나는 가장 높은 추상화에서 시작을 말할 것입니다. 사용자는 파일을 업로드 할 수 있으며 파일의 위치와 함께 URL이 반환됩니다. 따라서 사용자는 파일을 POST하고 새 파일의 URL이있는 201/204의 응답을받습니다. 소켓을 사용하는 경우에도 동일한 유형의 클라이언트 및 플랫폼 유형으로 동일한 서비스를 롤백 할 수 있도록 HTTP 기반 접근 방식을 고려할 것입니다. 그러나 소켓에서 매우 효율적인 구현을 작성할 수 있습니다.

소켓 또는 HTTP 요청 중 하나는 서버 측에서 다음과 동일합니다. 서버 측에는 파일 ID와 사용자를 취하는 FileLocator와 같은 인터페이스가 있습니다. FileSystemFileLocator는 FileLocator를 구현하고 파일 시스템에서 파일을 찾습니다. 까다로운 부분은 디렉터리에 약 1,000 개 정도의 디렉터리 또는 개체를 넣는 것이 아닙니다. 일반적인 기술 (각 파일에 고유 한 번호를 지정하는 경우)은 0을 입력하고 숫자를 반대로하여 12 개의 숫자로 만듭니다. 세 자리의 각 블록은 디렉토리 이름이되고 마지막 세 개는 파일 이름 : /123/400/000/000.pdf입니다. 예쁜 파일 이름을 되 찾으려면 데이터베이스에서 위치, 원래 파일 이름 및 일부 메타 데이터를 추적합니다.

그런 다음 S3를 사용하여 파일을 저장하는 S3FileLocator를 구현할 수 있습니다. MongoFileLocator를 사용하여 mongo 등에 데이터를 저장하십시오. 데이터베이스의 메타 데이터 (매우 빠르게 액세스 할 수 있음)가 파일 시스템이나 S3의 현실과 동기화되도록하는 방법을 파악해야합니다 .

파일을 읽을 때 파일의 작은 덩어리 (예 : 16k) 만 읽은 다음 완료 될 때까지 루프에 사용자에게 반환합니다. 파일을 한꺼번에 읽으면 매우 비효율적으로 메모리를 사용하게됩니다. 예를 들어 한 프로젝트에서 SQL Server 테이블의 파일을 메모리로 읽은 다음 메모리에 파일을 복사하여 개체를 클라이언트에 다시 쓰는 방식으로 구현했습니다. 데이터베이스에는 50MB의 파워 포인트 프레젠테이션이 포함되었습니다.

0

가장 쉬운 방법은 dropbox에 공용 폴더를 제공하는 계정을 만드는 것입니다. 이 폴더는 공개적으로 사용하거나 모든 사용자가 계정이나 로그인 암호없이 액세스 할 수 있습니다. 따라서 해당 폴더가 서버 사이트 또는 ftp가되어 서버 코드가 필요하지 않습니다. 이제 공용 폴더 링크가 서버 URL이되고 포트는 80이됩니다.클라이언트를 구현하면 Dropbox 공용 폴더의 각 사용자에 대해 별도의 폴더를 만들 수 있으므로 각 사용자마다 서로 다른 URL을 만들 수 있습니다. 자신의 데이터 동기화를 위해

관련 문제