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


89

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

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

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

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

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

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


3
그래, 당신 때문에 일정 페이징의 크롤 링 시스템 속도가 느려 큰 파일을 다운로드하는 경우
kinokijuf

답변:


103

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 )


하지만 파이어 폭스에서도 작동한다고 생각합니다. 여기 jsfiddle.net/kGLnP/5 샘플을 찾았 습니다 . 이 샘플은 크롬과 파이어 폭스에서 올바르게 작동합니다. 하지만 그들은 사파리 나 오페라와 같은 다른 브라우저에서 무엇을하나요? 난 .. 너무이 브라우저 mega.co.nz 링크를 다운로드 할 수 있습니다
아미르이면 MoLAA에게

1
예, 당신이 제공되는 샘플 ( jsfiddle.net/kGLnP/5는 ) 파이어 폭스을 위해 일해야하지만, 최신 사람 (버전 20 이상은 볼 수 developer.mozilla.org/en-US/docs/HTML/Element/a을 위한 지원에 대한 자세한 정보). Mega의 JavaScript 코드를 읽고 내 대답을 업데이트했습니다. (그것은 다른 브라우저에 대한 귀하의 질문에 대답 할 것이다 그들이 JS 전용 솔루션을 사용할 수없는 경우 기본적으로, 그들은 플래시를 사용에 의존 할 것이다..)
로베르토

어제이 사이트를 봤는데 같은 질문을하려고 했어요. 게임 모드를 다운로드하려고 할 때 브라우저 내에서 즉시 다운로드가 시작되어 최고 속도를 보여줍니다 !!! FF 20.0.1을 사용하고있었습니다.
Wel 2013-04-16

로베르토의 답변이 여전히 최신입니까? firefox의 mega.co.nz에서 큰 파일을 다운로드하고 플래시를 비활성화했지만 여전히 작동합니다. 큰 파일 을 다운로드하려고 할 때 firefox가 50MB 이상을 저장하도록 승인을 요청하고 있으므로 indexedDB를 사용한다고 생각합니다.
shacharz

1
아니요, (정말로) 최신이 아닙니다 . 현재 다운로드 스크립트는 여기에 있습니다 : eu.static.mega.co.nz/download_46.js . 나는 잠깐 살펴 보았고 캐싱에 의한 성능 향상을 포함하여 몇 가지 새로운 추가 사항으로 여전히 다소 동일한 트릭입니다 (예상대로 IndexedDB 사용). 코드를 읽을 시간이 있으면 답변을 업데이트하겠습니다.
roberto

4

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

다운로드 중 :

다운로드 중

다운로드 후 :

다운로드 후

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

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


3

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하십시오.


0

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 크롬에서 완벽하게 작동하는 것을 발견했으며 이미 프로덕션에서 사용하고 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.