본문 바로가기
카테고리 없음

클라우드 스토리지 ZIP 다운로드 (구글드라이브, Mega)

by RevFactory 2015. 3. 7.

구글드라이브

- 파일들을 선택 하고 다운로드하면 기본적으로 압축하여 다운로드를 수행합니다.

- 진행 메세지 : 우측하단에 진행상태를 보여주는 레이어가 나타납니다.


- 진행메세지 단계는 아래와 같습니다.

1. 파일을 검사하는 중입니다.

2. 압축을 준비하는 중입니다.

3. 다운로드를 위해 압축 중

4. (브라우저 다운로드)

"다운로드를 위해 압축 중" 단계에서는 2초마다 export-status API를 호출하여 상태 Progress를 업데이트 합니다. (완전히 정상 동작하지는 않습니다. 대부분 계속 응답으로 0만 받다가 완료되고 다운로드 됨)


서버내 임시파일로 압축을 한 뒤에 완료되면 다운로드하는 방식입니다.

분할압축 옵션은 지원하지 않습니다.

대용량 다운로드 테스트 (6GB) : 2GB까지만 압축되고 다운로드 됨




MEGA (https://mega.co.nz/)

다수 파일들을 선택하여 ZIP 다운로드 할 수 있는 기능 제공 

HTML5 File manager를 통해 업로드, 다운로드 수행합니다.

비표준 HTML5태그를 사용하여 크롬외의 브라우저에 지원하지 않는 기능들이 있다고 합니다.

다운로드시 파일을 Chunk로 나누어 따로 받아 합치는 방식을 사용합니다.

ex)

https://gfs270n027.userstorage.mega.co.nz/dl/{id}/0-122123 HTTP/1.1

...

https://gfs270n027.userstorage.mega.co.nz/dl/{id}/393216-786431 HTTP/1.1



대용량 다운로드 테스트 (4GB) : IE는 1G만 지원, 크롬은 안내 (경고) 사항 팝업 후 다운로드




HTML5 로컬 스토리지를 사용하는 것으로 보입니다.

C:\Users\{User}\AppData\Local\Google\Chrome\User Data\Default\Local Storage


HTML5 Indexed Database로 개별 Chunk파일을 관리합니다.



- Chunk는 XDomainRequest 또는 XMLHttpRequest로 데이터를 전송 받아 메모리에 로드합니다.

- Chunk파일이 실제 파일로 저장되는지 Javascript를 확인하여 보니 메모리에 쓰는 것으로 보여

 다운로드를 700MB정도 진행된 후 전송을 중단하니 메모리가 700MB 내려갑니다.



- 로딩되는 javascript들..


- 전송이 모두 완료되면 HTML File API로 파일이 저장 됩니다.