2010-03-28 10 views
4

거대한 파일을 업로드 할 응용 프로그램을 만들고 있습니다.거대한 (GB) 파일을 웹 서버에 업로드하는 방법

  1. 이 (VMDK 파일의 크기가 GB를 할 수 있습니다 VM웨어 컨버터 도구를 사용하여) 사용자의 실제 머신에서 VMDK 파일을 만듭니다 다음 이 응용 프로그램은 달성하기 위해 무엇을하려고 조금 설명입니다.
  2. 이 vmdk 파일을 원격 서버에 업로드
  3. 이제 원격 서버에 vmdk 파일을 갖는 목적이 접근성입니다. 멀리 그의 실제 시스템에서 사용자, 즉
  4. , 나중에 웹 콘솔을 통해 로그인 및 에 원격 서버에 VMDK에서 가상 컴퓨터를 인스턴스화 할 수

나는이 정상 파일 업로드는 다른 상황을 만드는 생각 (10-20MB 파일 업로드).

rsync/scp/sftp가 도움이 될지 모르지만 ... 웹 인터페이스를 사용하여 가능합니까?

그렇다면 파일을 효율적으로 변환하고 업로드하기 위해 최종 사용자를위한 별도의 클라이언트를 만들어야합니까?

아무 도움이됩니다 ..

+0

당신이 사용중인 플랫폼 말을 할 수 있습니다 - .NET 자바, 리눅스, 윈도우를? 그것은 그 대답에 영향을 미칠 점에 달하고 있습니다. –

+0

클라이언트는 Windows/Linux 일 수 있습니다. .NET은 문제가되지 않으므로 Java를 사용하는 것이 좋습니다. –

+0

로컬 Java는 SCP를 사용할 수 있습니다. http://www.jcraft.com/jsch/ –

답변

6

HTTP가 아닌 파일 전송 프로토콜을 사용하십시오. 연결이 끊어진 경우 중간에 전송을 다시 시작할 수있는 프로토콜이 필요합니다.


나는 현재 FTP를 사용하지 않습니다.


저는 현재 모든 파일 전송 프로토콜에 대한 전문가가 아닙니다. 저는 FTP 전문가 였기 때문에 이에 대해 권장합니다.

그러나이 상황에서는 투명성이 필요하다고 가정 할 때 벗어난 것 같습니다. 이 시스템의 모든 사용자는 이미 컴퓨터에 VMWare Converter 소프트웨어를 가지고 있습니다. 나는 그들이 실제 업로드를 할 당신의 작은 프로그램을 가질 수없는 이유를 알지 못한다. Converter 소프트웨어에 대한 API가 있다면 프로그램은 전체 프로세스를 자동화 할 수 있습니다. 야간에 집에 가기 전에 프로그램을 실행하면 프로그램이 vmdk로 변환 된 다음 업로드됩니다.

정확히 어떤 프로토콜을 사용해야할지 모르겠다. 그것은 약간의 실험을 필요로합니다. 그러나 프로토콜 사용이 소규모 응용 프로그램과 서비스에 포함되어 있으면 사용자는 실험중인 프로토콜을 알 필요가 없습니다. 작은 프로그램을 자동 업데이트 할 수있는 형태로 배포하는 경우 특히 더 배우면 변경할 수 있습니다.

+0

을 참조하십시오. FTP가 아닌 SFTP/SCP를 권하고 싶습니다. FTP는 방화벽을 설정하기에는 어려움이 있습니다. 또한 SCP는 즉시 파일을 압축합니다. –

+0

@Vladimir : 감사합니다. 나는 내가 FTP를 의미하지 않는다는 것을 분명히했다. –

+0

하지만 파일을 업로드하기 위해 웹 페이지 아래에 rsync/sftp/scp를 투명하게 사용할 수 있습니까? –

2

Rsync는 지원하는 호스트를 찾을 수 있다면 이상적입니다.
파일의 변경된 부분 만 쉽게 다시 전송하고 ssh, 압축 등을 사용할 수있는 옵션이 내장되어 있습니다.

원격 복사가 로컬 파일과 일치하지 않는 것을 확인할 수도 있습니다 많은 데이터

+0

하지만 파일 업로드를 위해 웹 페이지 아래에 rsync/sftp/scp를 투명하게 사용할 수 있습니까? –

+0

클라이언트 컴퓨터에 로컬 응용 프로그램을 작성 중이며 서버를 제어하고 있습니다. 따라서 rsync를 설치 및 실행하고 반대쪽에 rsync 서버가 있어야합니다. 당신이 포트 80을 사용한다고 말할 수 있습니다. 웹상에서 의미하는 바가 있다면 –

-2

나는 프로세스를 가속화하기 위해 병렬 FTP 스트림을 실행할 것이다.

+5

그것은 농담입니다, 그렇죠? –

+2

-1 : 농담이 아니라고 생각합니다. 만약 당신이 그것을 의미한다면, 당신은 정교 할 필요가있어서 웃고/거지는 멈출 수 있습니다. –

+0

당신은 웃을지도 모르지만, 실제로 이것을했습니다. (그리고 나는 여전히 웃고 있습니다). 어떤 이유로 FileZilla Server가 개별 연결을 제한하고있었습니다. –

0

어떤 프로토콜을 사용할 지 고민하지 않고도 대부분의 업스트림 연결에서 이러한 업로드가 얼마나 오래 걸릴지 알고 계십니까?

2

다음 해결책 중 하나를 시도해보십시오.

또는 자신이 치열한 경우. 플래시 기반의 rsync 클라이언트를 사용하는 것이 좋을 것입니다. 그런 다음 웹 호스트에서 rsync 서버를 실행하고 브라우저와 함께 다운로드 한 rsync 클라이언트로 업로드하십시오.

3

웹 인터페이스 사용을 주장하는 경우 서명 된 Java 애플릿과 비슷한 방법이 있습니다 (Flash 나 다른 유사한 기술과는 말할 수 없지만 유사하게 능력있는).

일단 애플릿과 같은 컨트롤로 이동하는 임계 값을 초과하면 작업을 수행 할 수있는 방법과 방법에 대해 훨씬 더 자유 롭습니다.

파일을 업로드하는 데있어 HTTP 자체에는 아무런 문제가 없습니다. 일반적인 브라우저는 크리미 클라이언트입니다. (언급 한 바와 같이 재시작 기능은 하나의 제한 사항입니다.)

애플릿을 사용하면 원하는 프로토콜을 선택할 수 있으며 클라이언트 연결이 포화되지 않도록 업로드를 조절할 수 있습니다. 다시 시작할 수 있으며 조각을 보내고 체크섬을 수행 할 수 있습니다.

전체 웹 페이지가 필요하지는 않지만 작은 구성 요소 일 수 있습니다. 보이지 않는 구성 요소 일 수도 있습니다 (JS를 통해 해고 됨). 그러나 중요한 요소는 SIGNED 구성 요소 여야한다는 것입니다. 서명되지 않은 구성 요소는 사용자 파일 시스템과 상호 작용할 수 없으므로 서명 된 구성 요소를 가져와야합니다. 그것은 자신의 인증서, 등등 수 있습니다. 그것은 일반적인 웹 인증서와 유사한 메커니즘의 많은 다음과 같습니다.

분명히 클라이언트 브라우저는 애플릿 기술을 지원해야합니다.

1

이전에 비슷한 질문을 한 적이 있는데 웹 인터페이스 업 로더를 사용하여 만족스러운 답변을 얻지 못했습니다.

Youtube를 사용하면 사용자가 2GB 파일을 업로드 할 수 있습니다. 그래서 내 질문은 Youtube/Google이 2GB의 파일 업로드를 수백만 명의 사용자로부터 어떻게 처리하나요?

What is the best way to implement a big (1GB or more) file uploader website in PHP or Java?

+0

@Cory :보다 신뢰할 수있는 업로드를 얻으려고 HTTP 위에 레이어하는 도구가 있습니다. 그러나 그들은 많은 비용이 들며 HTTP로이 작업을 수행해야한다면 가치가 있습니다. 다른 파일 전송 솔루션에 대해 언급 할 때 이들을 포함시킵니다. 그래도 2GB에서 10GB 사이의 차이점을 고려하십시오. –

관련 문제