ดาวน์โหลดไฟล์เช่น mega.co.nz


89

วันนี้ฉันตรวจสอบ mega.co.nz และฉันรู้สึกตื่นเต้นกับคุณสมบัติบางอย่าง ตัวอย่างเช่นในหน้าดาวน์โหลดมันจะดาวน์โหลดไฟล์บนเบราว์เซอร์และหลังจากนั้นจะถอดรหัสด้วยจาวาสคริปต์

ตัวอย่างเช่นดูลิงค์นี้เพื่อดาวน์โหลดไฟล์ png:

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

ในลิงค์นี้มันจะเริ่มการดาวน์โหลดภายในเบราว์เซอร์ ฉันตรวจสอบแท็บเครือข่ายในองค์ประกอบตรวจสอบมันจะดาวน์โหลดบางส่วนของไฟล์ด้วย AJAX หลังจากนั้นเสร็จสิ้นทุกส่วนของไฟล์จะบันทึกทั้งหมดไว้ในไฟล์เดียวบนคอมพิวเตอร์โดยอัตโนมัติ!

ฉันอยากรู้ว่าพวกเขาทำอะไร? คุณช่วยอธิบายหรือเชื่อมโยงไปยังแหล่งข้อมูลเกี่ยวกับไฟล์ดาวน์โหลดภายในเบราว์เซอร์แบบนั้นได้ไหม

ยังสามารถทำได้ด้วยจาวาสคริปต์เท่านั้นหรือควรใช้ปลั๊กอินแฟลชหรืออะไรทำนองนั้น?


3
ใช่และถ้าคุณดาวน์โหลดไฟล์ขนาดใหญ่ระบบจะช้าลงในการรวบรวมข้อมูลเนื่องจากการเพจคงที่
kinokijuf

คำตอบ:


103

Mega ใช้วิธีการต่างๆในการทำสิ่งนี้: (ข้อมูล ณ วันที่ 27 พ.ย. 2556)

  1. ระบบไฟล์ API (Chrome / Firefox Extension polyfill)
  2. Adobe Flash SWF Filewriter (ทางเลือกของเบราว์เซอร์เก่า)
  3. BlobBuilder (IE10 / IE11)
  4. MEGA Firefox Extension (เลิกใช้แล้ว)
  5. Arraybuffer / Blob (ในหน่วยความจำ) + a [ดาวน์โหลด] (สำหรับเบราว์เซอร์ที่รองรับ [ดาวน์โหลด])
  6. MediaSource (โซลูชันการสตรีมแบบทดลอง)
  7. Blob เก็บไว้ในที่จัดเก็บ IndexedDB + a [ดาวน์โหลด] (Firefox 20+ ปรับปรุงวิธี Blob ในหน่วยความจำ)

(ที่มา: https://eu.static.mega.co.nz/js/download_6.js )


แต่ฉันคิดว่ามันใช้ได้กับ firefox ด้วย ผมพบว่ากลุ่มตัวอย่างที่นี่jsfiddle.net/kGLnP/5 ตัวอย่างนี้ใช้ได้กับ chrome และ firefox อย่างถูกต้อง แต่สิ่งที่พวกเขาทำกับเบราว์เซอร์อื่น ๆ เช่นซาฟารีหรือโอเปร่า? ฉันสามารถดาวน์โหลดลิงก์ mega.co.nz กับเบราว์เซอร์เหล่านี้ได้เช่นกัน ..
Amir Molaa

1
ใช่ตัวอย่างที่คุณให้มา ( jsfiddle.net/kGLnP/5 ) ควรใช้ได้กับ Firefox แต่จะใช้ได้เฉพาะกับ Firefox รุ่นล่าสุดเท่านั้น (เวอร์ชัน 20 หรือใหม่กว่าโปรดดูdeveloper.mozilla.org/en-US/docs/HTML/Element/aสำหรับ ข้อมูลเพิ่มเติมเกี่ยวกับการรองรับ) ฉันเพิ่งอ่านรหัส JavaScript ของ Mega และอัปเดตคำตอบของฉัน (จะตอบคำถามของคุณเกี่ยวกับเบราว์เซอร์อื่น ๆ โดยทั่วไปพวกเขาจะหันไปใช้แฟลชเมื่อไม่สามารถใช้โซลูชันเฉพาะ JS)
roberto

ว้าวฉันเพิ่งเห็นเว็บไซต์นี้เมื่อวานนี้และกำลังจะถามคำถามเดียวกัน เมื่อฉันพยายามดาวน์โหลด Game mod ฉันรู้สึกประหลาดใจที่การดาวน์โหลดเริ่มต้นทันทีในเบราว์เซอร์ที่แสดงอัตราความเร็วเต็มของฉัน !!! ฉันใช้ FF 20.0.1
เวล

คำตอบของ Roberto ยังคงเป็นปัจจุบันอยู่หรือไม่? ฉันได้ลองดาวน์โหลดไฟล์ขนาดใหญ่จาก mega.co.nz ใน firefox และปิดใช้งานแฟลชและมันยังใช้งานได้ เมื่อพยายามดาวน์โหลดไฟล์ขนาดใหญ่ firefox กำลังขอการอนุมัติเพื่อจัดเก็บมากกว่า 50MB ซึ่งทำให้ฉันคิดว่าพวกเขาใช้ indexedDB
shacharz

1
ไม่มีก็ไม่ได้ (จริงๆ) ถึงวันที่ดาวน์โหลดสคริปต์ปัจจุบันอยู่ที่นี่: eu.static.mega.co.nz/download_46.js ฉันดูอย่างรวดเร็วและยังคงเป็นเทคนิคเดิม ๆ ไม่มากก็น้อยด้วยการเพิ่มใหม่ ๆ รวมถึงการปรับปรุงประสิทธิภาพโดยการแคช (โดยใช้ IndexedDB ตามที่คุณคาดเดา) ฉันจะอัปเดตคำตอบเมื่อมีเวลาอ่านโค้ด
roberto

4

การดำเนินการขั้นพื้นฐานของหลายส่วนในเบราว์เซอร์ดาวน์โหลดใช้หยดและ URL API ที่ถูกนำมาที่นี่ จะดาวน์โหลดไฟล์ใน 4 คำขอพร้อมกันและแสดงความคืบหน้าด้วย โปรดทราบว่าrangeโดยทั่วไปแล้วการตั้งค่าส่วนหัวอาจไม่ใช่ความคิดที่ดีสำหรับคำขอ XHR โปรดดูที่หัวข้อนี้

ขณะดาวน์โหลด:

ขณะดาวน์โหลด

หลังจากดาวน์โหลด:

หลังจากการดาวน์โหลด

อีกหัวข้อที่น่าสนใจคือการใช้ฟังก์ชัน Pause / Resume จาก Mega XHR API ของเบราว์เซอร์ปัจจุบันไม่ได้ให้ความสามารถดังกล่าวดังนั้นโอกาสเดียวที่คุณมีคือทำการดาวน์โหลดชิ้นส่วนขนาดเล็กหลาย ๆ ชิ้นและยอมแพ้ในส่วนที่ดาวน์โหลดของชิ้นส่วนเล็ก ๆ ของคุณเช่นเดียวกับที่ทำบน Mega ด้วย แต่fetchสตรีมมิ่งคุณลักษณะสามารถนำมาใช้เพื่อวัตถุประสงค์ที่ผมไม่ได้สำรวจว่ายังดีพอ แต่มันเป็นเอกสารที่นี่

Btw ดูโครงการที่ยอดเยี่ยมเหล่านี้:


2

MEGAcmd

มีmegacmdซึ่งเป็นอินเทอร์เฟซบรรทัดคำสั่งอย่างเป็นทางการ คุณสามารถสร้างได้จากแหล่งที่มาใน github ที่https://github.com/meganz/MEGAcmd

megacmd เป็น wrapper รอบ ๆ Mega SDK และหากคุณตัดสินใจที่จะรวบรวมด้วยตัวคุณเองคุณจะต้องมีการอ้างอิงเดียวกัน (บนอูบุนตู) เหมือนกับที่ระบุไว้ด้านล่างสำหรับ Mega SDK

สำหรับรายละเอียดเกี่ยวกับการใช้งานดูผู้ใช้ MEGAcmd คู่มือ

เมกะ SDK

Mega SDK ซึ่งสามารถรวบรวมได้โดยทำตามขั้นตอนในหน้าgithub รวมถึง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

โมดูล python 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 และรับ URL ของลิงก์ mega.nz

getpassใช้สำหรับป้อนรหัสผ่านอย่างปลอดภัยในคอนโซลเพื่อหลีกเลี่ยงการจัดเก็บรหัสผ่านในสคริปต์ - หากคุณสะดวกในการเข้ารหัสรหัสผ่านให้ตั้งรหัสผ่านในบรรทัด # 7

megatools

บนกล่อง Linux / posix ส่วนใหญ่คุณสามารถติดตั้งmegatoolsจากที่เก็บมาตรฐานเช่น

บน Ubuntu / debian:

apt install megatools

บน MacOS:

brew install megatools

เมื่อติดตั้งแล้วคุณจะพบยูทิลิตี้บรรทัดคำสั่งจำนวนหนึ่งmegadlซึ่งสามารถดาวน์โหลดได้ทั้งไฟล์ที่แชร์และไฟล์ของคุณเอง ดูmegadl -hรายละเอียด


0

ในปี 2020 คุณสามารถใช้ Service Workers เพื่อรวมโค้ดที่กำหนดเองของคุณเข้ากับตัวจัดการการดาวน์โหลดในตัวของเบราว์เซอร์ได้อย่างราบรื่น: https://developers.google.com/web/updates/2016/06/sw-readablestreams

ฉันเดาว่าคุณมีส่วนหัวต่อไปนี้เพื่อให้ดาวน์โหลดไฟล์แทนที่จะดู:

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

โดยส่วนตัวแล้วฉันพบว่าวิธีนี้ทำงานได้อย่างไม่มีที่ติทั้งใน Google Chrome ใน Firefox และฉันก็ใช้มันในการผลิตแล้ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.