[javascript] mega.co.nz와 같은 파일 다운로드

오늘 저는 mega.co.nz를 확인했고 몇 가지 기능에 대해 기대하고 있습니다. 예를 들어 다운로드 페이지에서 브라우저에 파일을 다운로드 한 후 자바 스크립트로 해독합니다.

예를 들어 png 파일을 다운로드하려면 다음 링크를 참조하십시오.

https://mega.co.nz/#!7JRgFJzJ!efpJGWuPhYczLexY19ex82nuwfs4sR_DG4JXddeClH4

이 링크에서 브라우저 내에서 다운로드를 시작합니다. 검사 요소에서 네트워크 탭을 확인하면 파일의 모든 부분이 완료된 후 AJAX로 파일의 일부를 다운로드하고 모든 파일을 컴퓨터에 자동으로 하나의 파일에 저장합니다!

그들이 무엇을하는지 알고 싶어요? 그런 브라우저 내부의 다운로드 파일에 대한 일부 리소스를 설명하거나 링크 할 수 있습니까?

또한 자바 스크립트로만 수행 할 수 있습니까? 아니면 일부 플래시 플러그인을 사용해야합니까?



답변

Mega는이를 위해 여러 가지 방법을 사용합니다. (2013 년 11 월 27 일 기준)

  1. 파일 시스템 API (Chrome / Firefox 확장 폴리 필)
  2. Adobe Flash SWF Filewriter (이전 브라우저 대체)
  3. BlobBuilder (IE10 / IE11)
  4. MEGA Firefox Extension (사용되지 않음)
  5. Arraybuffer / Blob (메모리 내) + a [다운로드] ( [다운로드] 를 지원하는 브라우저의 경우)
  6. MediaSource (실험용 스트리밍 솔루션)
  7. IndexedDB 스토리지에 저장된 Blob + a [다운로드] (Firefox 20 이상, 인 메모리 Blob 방식에 비해 개선됨)

(출처 : https://eu.static.mega.co.nz/js/download_6.js )


답변

Blob 및 URL API를 사용하는 멀티 파트 브라우저 내 다운로더의 기본 구현이 여기에 있습니다 . 4 개의 동시 요청에 대한 파일을 다운로드하고 진행 상황도 표시합니다. range헤더 설정 은 일반적으로 XHR 요청에 대해 좋은 생각이 아닐 수 있습니다 . 이 주제를 살펴보십시오 .

다운로드 중 :

다운로드 중

다운로드 후 :

다운로드 후

또 다른 흥미로운 주제는 Mega의 Pause / Resume 기능을 구현하는 것입니다. 현재 브라우저의 XHR API는 이러한 기능을 제공하지 않으므로 Mega에서 수행되는 것처럼 보이는 방식은 여러 개의 작은 청크를 다운로드하고 다운로드 한 부분을 포기하는 것뿐입니다. 그러나 fetch스트리밍 기능은 그 목적으로 사용할 수 있습니다. 아직 충분히 탐구하지는 않았지만 여기 에 문서화되어 있습니다 .

Btw, 다음 멋진 프로젝트를 살펴보십시오.


답변

MEGAcmd

공식 명령 줄 인터페이스 인 megacmd 가 있습니다. https://github.com/meganz/MEGAcmd의 github 소스에서 빌드 할 수도 있습니다.

megacmd 는 Mega SDK를 둘러싼 래퍼이며 직접 컴파일하기로 결정한 경우 Mega SDK에 대해 아래 나열된 것과 동일한 종속성 (우분투)이 필요합니다.

사용법에 대한 자세한 내용은 MEGAcmd 사용자 안내서를 참조하십시오 .

메가 SDK

github 페이지 의 단계에 따라 컴파일 할 수있는 Mega SDK입니다 . 여기에는 megacli동기화 및 다운로드 / 업로드를위한 대화 형 쉘인 유틸리티가 포함되어 있습니다 .

## compilation steps for ubuntu
git clone --depth 1 https://github.com/meganz/sdk megasdk
cd megasdk
sudo apt install libcurl4-openssl-dev  libc-ares-dev libssl-dev libcrypto++-dev  zlib1g-dev libsqlite3-dev  libfreeimage-dev libswscale-dev
autogen.sh
./configure
make -j 8  ## pass the number of CPUs you have to speed up compilation
sudo make install

mega.py python 모듈 (사용되지 않음)

텍스트 모드에서 링크를 다운로드하기 위해 실제 레시피를 검색하는이 질문을 찾은 사람들을 위해 여기 mega.py 모듈 을 사용하는 간단한 파이썬 스크립트가 있습니다 (으로 설치 sudo pip install mega.py) :

import sys
import getpass
#install the module with: 'sudo pip install mega.py'
from mega import Mega

email = '_your_megamail_@domain.com'
password = getpass.getpass(prompt='Mega password for {}:'.format(email))

mega = Mega({'verbose': True})
m = mega.login(email, password)
m.download_url(sys.argv[1])

이 스크립트는 python 2.7에서 작동하며 mega.nz 링크의 URL을 사용합니다.

getpass 는 스크립트에 암호를 저장하는 것을 방지하기 위해 콘솔에 암호를 안전하게 입력하는 데 사용됩니다. 암호를 하드 코딩하는 데 익숙하다면 7 번 줄에 설정하십시오.

megatools

대부분의 Linux / posix 상자 에서 표준 저장소에서 megatools 를 설치할 수 있습니다.

우분투 / 데비안 :

apt install megatools

MacOS :

brew install megatools

일단 설치되면 여러 명령 줄 유틸리티를 찾을 수 있으며 megadl그중 공유 파일과 자신의 파일을 모두 다운로드 할 수 있습니다. 자세한 내용은를 참조 megadl -h하십시오.


답변

2020 년부터 서비스 워커를 사용하여 사용자 지정 코드를 브라우저의 기본 제공 다운로드 관리자와 원활하게 통합 할 수 있습니다. https://developers.google.com/web/updates/2016/06/sw-Readablestreams

또한 파일을 보는 대신 다운로드하려면 다음 헤더가있을 것입니다.

 headers: {
   'Content-Type': 'application/octet-stream',
   'Content-Disposition': 'attachment; filename="your_filename.bin"',
 }

개인적으로 저는이 접근 방식이 Firefox의 Google 크롬에서 완벽하게 작동하는 것을 발견했으며 이미 프로덕션에서 사용하고 있습니다.


답변