구글드라이브
- 파일들을 선택 하고 다운로드하면 기본적으로 압축하여 다운로드를 수행합니다.
- 진행 메세지 : 우측하단에 진행상태를 보여주는 레이어가 나타납니다.
- 진행메세지 단계는 아래와 같습니다.
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로 파일이 저장 됩니다.