Unduh file seperti mega.co.nz

89

Hari ini saya memeriksa mega.co.nz dan saya senang dengan beberapa fitur. Misalnya di halaman unduhan akan mengunduh file di browser dan setelah itu mendekripsi dengan javascript.

misalnya lihat tautan ini untuk mengunduh file png:

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

di tautan ini itu akan mulai mengunduh di dalam browser. Saya memeriksa tab jaringan di elemen inspeksi itu akan mengunduh bagian-bagian file dengan AJAX setelah itu menyelesaikan semua bagian file, akan menyimpan semuanya dalam satu file di komputer secara otomatis!

saya ingin tahu apa yang mereka lakukan? Bisakah Anda menjelaskan atau menautkan ke beberapa sumber daya tentang file unduhan di dalam browser seperti itu?

juga bisa melakukannya hanya dengan javascript atau harus menggunakan beberapa plugin flash atau semacamnya?

Amir Molaa
sumber
3
Ya, dan jika Anda mengunduh file besar, sistem melambat hingga merangkak karena paging yang konstan
kinokijuf

Jawaban:

103

Mega menggunakan beberapa metode berbeda untuk melakukan ini: (per 27 Nov 2013)

  1. API Sistem File (Polyfill Ekstensi Chrome / Firefox)
  2. Adobe Flash SWF Filewriter (penggantian browser lama)
  3. BlobBuilder (IE10 / IE11)
  4. Ekstensi MEGA Firefox (tidak digunakan lagi)
  5. Arraybuffer / Blob (dalam memori) + a [unduh] (untuk browser yang mendukung [unduh])
  6. MediaSource (solusi streaming eksperimental)
  7. Blob disimpan di penyimpanan IndexedDB + a [unduh] (Firefox 20+, peningkatan dibandingkan metode Blob dalam memori)

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

roberto
sumber
tetapi saya pikir ini juga berfungsi di firefox. saya menemukan sampel di sini jsfiddle.net/kGLnP/5 . contoh ini berfungsi di chrome dan firefox dengan benar. tapi apa yang mereka lakukan untuk browser lain seperti safari atau opera? saya dapat mengunduh tautan mega.co.nz dengan peramban ini juga ..
Amir Molaa
1
Ya, sampel yang Anda berikan ( jsfiddle.net/kGLnP/5 ) seharusnya berfungsi untuk Firefox, tetapi hanya yang terbaru (versi 20 atau lebih baru, lihat developer.mozilla.org/en-US/docs/HTML/Element/a untuk info lebih lanjut tentang dukungan). Saya baru saja membaca kode JavaScript Mega dan memperbarui jawaban saya. (Ini akan menjawab pertanyaan Anda tentang browser lain. Pada dasarnya, mereka akan menggunakan flash ketika mereka tidak dapat menggunakan solusi khusus JS.)
roberto
Wow, saya baru saja melihat situs ini kemarin dan akan menanyakan pertanyaan yang sama. Ketika saya mencoba mengunduh mod Game, saya terkejut unduhan segera dimulai di dalam browser yang menunjukkan kecepatan penuh saya !!! Saya menggunakan FF 20.0.1.
Wel
Apakah jawaban roberto masih mutakhir? Saya sudah mencoba mengunduh file besar dari mega.co.nz di firefox dan menonaktifkan flash dan masih berfungsi. Ketika mencoba mengunduh file besar, firefox meminta persetujuan untuk menyimpan lebih dari 50MB yang membuat saya berpikir mereka menggunakan indexedDB.
shacharz
1
Tidak, ini belum (benar-benar) mutakhir, skrip unduhan saat ini ada di sini: eu.static.mega.co.nz/download_46.js . Saya melihat sekilas dan masih kurang lebih trik yang sama dengan beberapa tambahan baru, termasuk peningkatan kinerja dengan caching (menggunakan IndexedDB, seperti yang Anda duga). Saya akan memperbarui jawaban saya ketika saya punya waktu untuk membaca kode.
roberto
4

Implementasi dasar dari multipart in-browser downloader menggunakan Blob dan URL API dibawa ke sini . Ini mengunduh file pada 4 permintaan bersamaan dan menunjukkan kemajuan juga. Harap dicatat bahwa tampaknya pengaturan rangetajuk biasanya bukan ide yang baik pada permintaan XHR, lihat topik ini .

Saat mengunduh:

Saat mengunduh

Setelah diunduh:

Setelah diunduh

Topik menarik lainnya adalah menerapkan fungsi Jeda / Lanjutkan dari Mega. XHR API dari browser saat ini tidak menawarkan kemampuan itu sehingga satu-satunya kesempatan yang Anda miliki adalah mengunduh beberapa potongan berukuran kecil dan menyerah pada bagian yang diunduh dari potongan kecil Anda, seperti yang dilakukan pada Mega juga. Tapi fetchfitur streaming bisa digunakan untuk tujuan itu, saya belum mengeksplorasinya dengan baik tapi didokumentasikan disini .

Btw, lihat proyek luar biasa ini:

Ebrahim Byagowi
sumber
2

MEGAcmd

Ada megacmd , antarmuka baris perintah resmi. Anda juga dapat membuatnya dari sumber di github di https://github.com/meganz/MEGAcmd

megacmd adalah pembungkus di sekitar Mega SDK dan jika Anda memutuskan untuk mengompilasinya sendiri, Anda memerlukan dependensi yang sama (di ubuntu) seperti yang tercantum di bawah ini untuk Mega SDK.

Untuk detail tentang penggunaan lihat Panduan Pengguna MEGAcmd .

Mega SDK

Mega SDK yang dapat dikompilasi dengan mengikuti langkah-langkah di halaman github . Ini termasuk megacliutilitas yang merupakan shell interaktif untuk menyinkronkan dan mengunduh / mengunggah.

## 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

modul mega.py python (tidak digunakan lagi)

Bagi mereka yang menemukan pertanyaan ini mencari resep sebenarnya untuk mengunduh tautan dalam mode teks di sini adalah skrip python sederhana yang menggunakan modul mega.py (instal dengan sudo pip install mega.py):

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

email = '[email protected]'
password = getpass.getpass(prompt='Mega password for {}:'.format(email))

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

Skrip bekerja dengan python 2.7 dan mengambil URL dari tautan mega.nz.

getpass digunakan untuk memasukkan kata sandi dengan aman di konsol untuk menghindari penyimpanan kata sandi dalam skrip - jika Anda merasa nyaman melakukan hardcode kata sandi, setel di baris # 7.

megatools

Pada kebanyakan kotak Linux / posix Anda dapat menginstal megatools dari repositori standar, mis

Di ubuntu / debian:

apt install megatools

Di MacOS:

brew install megatools

Setelah terinstal, Anda akan menemukan sejumlah utilitas baris perintah, di megadlantaranya dapat mengunduh file bersama dan file Anda sendiri. Lihat megadl -hdetailnya.

ccpizza
sumber
0

Mulai tahun 2020, Anda dapat menggunakan Service Worker untuk mengintegrasikan kode khusus Anda dengan mulus dengan pengelola unduhan bawaan browser: https://developers.google.com/web/updates/2016/06/sw-readablestreams

Saya juga menduga Anda akan memiliki tajuk berikut agar file dapat diunduh alih-alih dilihat:

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

Secara pribadi saya telah menemukan pendekatan ini bekerja dengan sempurna di kedua Google Chrome di Firefox, dan saya sudah menggunakannya dalam produksi.

vdudouyt
sumber