2011-09-20 6 views
1

FTP를 사용하여 정기적으로 작은 데이터 파일을 프로그램에서 서버로 업로드하고 있습니다. 사용자는 javascript XMLHttpRequest 함수를 사용하여 데이터를 읽는 웹 페이지에서 데이터에 액세스합니다. 모두 작동하는 것처럼 보이지만 FTP와 XMLHttpRequest가 서로 다른 방식으로 인해 발생하는 몇 가지 문제로 고민하고 있습니다. 내가 생각해 낸 유일한 아이디어는 실패한 업로드를 다시 시도하고 실패한 XMLHttpRequests 또는 불완전한 데이터를 반환하고 다시 시도하는 것을 검색하는 것입니다.FTP 동기화

응용 프로그램 사용자가 NAT 호스트 뒤에있을 가능성이 높고 고정 IP 번호가없는 서버를 호스트 할 수 없으며 멋진 외부 서버에 액세스 할 수 없기 때문에 FTP와 같은 간단한 것을 사용하고 싶습니다. .

누구든지 의견이 있으십니까?

+0

어떻게 작동합니까? 같은 기원 정책을 위반하는 것처럼 들립니다. – Anders

+1

무슨 뜻인지 확실하지 않습니다. javascript W 데이터 파일은 동일한 서 v의 같은 디렉토리에 저장됩니다. –

답변

1

임시 이름으로 파일을 업로드 한 다음 파일 이름을 변경하여 파일 잠금 문제를 방지하려면 어떻게해야합니까?

pseduo 코드 : 물론

FTPSend "c:\readme.txt" /as "readme.txt.tmp" 
if error retry FTPSend 
FTPRename "readme.txt.tmp" /as "readme.txt" 
if error retry rename 

당신은 또한이 루프에 걸려되지 않도록 당신은 실패한 작업을 다시 시도를 보내는 시간의 양을 제한 할 것입니다.

+1

좋은 아이디어. 시도한 서버에서 새로 업로드 한 파일의 이름을 바꿀 수있는 이전 파일 b4를 삭제해야합니다. 그래서 파일이 존재하지 않을 때 창이 나타납니다. 이상하게도 기존 파일을 업로드 파일로 바꿀 수는 있지만 이름을 바꿀 수는 없습니다. 아직도 내가하는 일보다 낫지. –

1

스크랩 FTP (NAT 친화적이지 않음) 및 HTTP를 통한 업로드를 수행하십시오. 이미 XHR을 사용하고 있기 때문에 HTTP를 처리 할 수있는 시스템을 갖추고 있습니다. POST 요청을 통해 오버로드를 허용하고 기존 내용을 덮어 쓰거나 새 내용을 발표하기 전에 무결성 검사를 포함 할 수 있습니다.

+0

업로드는 WinINet API 함수를 사용하여 C++ 응용 프로그램에 내부적으로 수행됩니다. 나는 WinINet의 http 부분에 익숙하지 않다. 그것들이 당신이 제안하는 것의 모범이 될 것입니까? –

+0

WinINet http post를 사용하여 파일을 업로드하려고했습니다. 돌아 오는 모든 상태 값은 정상이지만 아무 것도 서버에 기록되지 않습니다. 파일이 게시 전에 존재하는지 여부는 중요하지 않습니다. –

+0

POST는 파일을 만들지 않으며 (PUT 않습니다) 메시지를 보내는 것만으로 폼 데이터를 구문 분석하고 파일을 만드는 처리기가 필요합니다. – Quentin

0

내 앱은 제어 할 수있는 서버에 대한 액세스 권한이없는 사용자가 사용할 수 있습니다. 나는. ISP 나 일부 무료 FTP 사이트에서 제공하는 파일 공간을 사용하게 될 것입니다. 따라서 모든 http post 기능이 작동하지 않습니다.

따라서 위의 이름 바꾸기 제안과 함께 FTP를 사용하고 있습니다. 이 2 존재하는 경우

1)) 파일 TEMP.htm을 삭제 업로드 filr TEMP.htm 3), 대상 파일을 삭제 배 (4) 어떤 수를 다시 시도) 파일을이

을 대상으로 TEMP.htm의 이름을 변경 3)과 4) 사이에 약간의 시간이 있기 때문에 웹 참조가 실패 할 수도 있습니다. 파일을 사용하는 페이지도 액세스를 다시 시도해야합니다.

관련 문제