Mega.co.nz gibi dosyaları indirin


89

Bugün mega.co.nz'yi kontrol ettim ve bazı özellikler konusunda heyecanlıyım. Örneğin indirme sayfasında dosyaları tarayıcıya indirecek ve ardından javascript ile şifresini çözecektir.

örneğin bir png dosyasını indirmek için bu bağlantıya bakın:

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

bu bağlantıda tarayıcı içinde indirmeye başlayacaktır. denetleme öğesindeki ağ sekmesini kontrol ettim, dosyanın tüm bölümlerini tamamladıktan sonra AJAX ile dosyanın bölümlerini indirecek, hepsini otomatik olarak bilgisayara tek bir dosyaya kaydedecek!

ne yaptıklarını bilmek istiyorum Tarayıcı içindeki dosyaları indirmekle ilgili bazı kaynakları açıklayabilir veya bunlara bağlantı verebilir misiniz?

Ayrıca bunu yalnızca javascript ile yapabilir mi yoksa bazı flash eklentileri veya bunun gibi bir şey mi kullanmalısınız?


3
Evet, ve eğer büyük bir dosya indirirseniz, sistem sürekli sayfalama nedeniyle yavaşlayacak
kinokijuf

Yanıtlar:


103

Mega, bunu yapmak için birkaç farklı yöntem kullanır: (27 Kasım 2013 itibariyle)

  1. Dosya sistemi API'si (Chrome / Firefox Extension polyfill)
  2. Adobe Flash SWF Filewriter (eski tarayıcılar yedeği)
  3. BlobBuilder (IE10 / IE11)
  4. MEGA Firefox Uzantısı (kullanımdan kaldırıldı)
  5. Arraybuffer / Blob (bellekte) + a [indir] ( [indirmeyi] destekleyen tarayıcılar için)
  6. MediaSource (deneysel akış çözümü)
  7. IndexedDB depolama + a [indir] (Firefox 20+, bellek içi Blob yöntemine göre iyileştirme)

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


ama firefox üzerinde de çalıştığını düşünüyorum. burada bir örnek buldum jsfiddle.net/kGLnP/5 . bu örnek, Chrome ve Firefox üzerinde doğru şekilde çalışır. ama safari veya opera gibi diğer tarayıcılar için ne yapıyorlar? i .. çok bu tarayıcılar ile mega.co.nz linklerden indirebilirsiniz
Amir Molaa

1
Evet, sağladığınız örnek ( jsfiddle.net/kGLnP/5 ) Firefox için çalışmalıdır, ancak yalnızca en son sürümler (sürüm 20 veya üzeri, bkz. Developer.mozilla.org/en-US/docs/HTML/Element/a for destekler hakkında daha fazla bilgi). Mega'nın JavaScript kodunu okudum ve cevabımı güncelledim. (Diğer tarayıcılar hakkındaki sorunuza cevap verecektir. Temel olarak, yalnızca JS çözümlerini kullanamadıklarında flash kullanmaya başvuracaklar.)
roberto

Vay be, dün bu siteyi gördüm ve aynı soruyu soracaktım. Bir Oyun modunu indirmeye çalıştığımda, tam hız oranımı gösteren tarayıcının içinde indirmenin hemen başlamasına şaşırdım !!! FF 20.0.1 kullanıyordum.
2013

Roberto'nun cevabı hala güncel mi? Firefox'ta mega.co.nz'den büyük bir dosya indirmeyi denedim ve flaşı devre dışı bıraktım ve hala çalışıyor. Büyük bir dosya indirmeye çalışırken firefox, 50MB'den fazla saklamak için onay istiyor, bu da bana indexedDB kullandıklarını düşündürüyor.
shacharz

1
Hayır, (gerçekten) güncel değil, mevcut indirme komut dosyası burada: eu.static.mega.co.nz/download_46.js . Hızlıca bir göz attım ve önbelleğe alma yoluyla performans iyileştirmeleri de dahil olmak üzere bazı yeni eklemelerle (tahmin ettiğiniz gibi IndexedDB kullanarak) aşağı yukarı aynı hileler. Kodu okumak için zamanım olduğunda cevabımı güncelleyeceğim.
roberto

4

Blob ve URL API'leri kullanan çok parçalı tarayıcı içi indiricinin temel bir uygulaması buraya getirilmiştir . Aynı anda 4 istek üzerine bir dosya indirir ve ilerlemeyi de gösterir. Lütfen rangebaşlık ayarlamanın genellikle XHR isteklerinde iyi bir fikir olmayabileceğini unutmayın , bu konuya bir göz atın .

İndirirken:

İndirirken

İndirmeden sonra:

İndirmeden sonra

Bir başka ilginç konu ise Mega'dan Duraklat / Devam Et işlevini uygulamak olacaktır. Mevcut tarayıcıların XHR API'si bu özelliği sunmuyor, bu nedenle sahip olduğunuz tek şans, Mega'da da olduğu gibi, küçük parçalarınızın indirilen bölümlerini indirip vazgeçmek için çok sayıda küçük boyutlu parça indirmek. Ancak fetchakış özelliği bu amaçla kullanılabilir, bunu henüz yeterince keşfetmedim ama burada belgelenmiştir .

Btw, şu harika projelere bir göz at:


2

MEGAcmd

Resmi komut satırı arayüzü megacmd var . Ayrıca, https://github.com/meganz/MEGAcmd adresindeki github'daki kaynaklardan da oluşturabilirsiniz.

megacmd Mega SDK etrafında bir sarmalayıcıdır ve kendi başınıza derlemeye karar verirseniz, Mega SDK için aşağıda listelenenlerle aynı bağımlılıklara (ubuntu üzerinde) ihtiyacınız olacaktır.

Kullanımla ilgili ayrıntılar için MEGAcmd Kullanıcı Kılavuzuna bakın .

Mega SDK

Github sayfasındaki adımlar izlenerek derlenebilen Mega SDK . megacliEşzamanlama ve indirme / yükleme için etkileşimli bir kabuk olan yardımcı programı içerir .

## 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 modülü (kullanımdan kaldırıldı)

Metin modunda bir bağlantı indirmek için gerçek bir tarif arayan bu soruyu bulanlar için burada mega.py modülünü kullanan basit bir python betiği var (birlikte yükleyin 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])

Komut dosyası python 2.7 ile çalışır ve mega.nz bağlantısının URL'sini alır.

getpass , parolayı kodda saklamaktan kaçınmak için konsola güvenli bir şekilde girmek için kullanılır - parolayı kodlamada rahatsanız , 7. satırda ayarlayın.

megatools

Çoğu Linux / posix kutusunda megatoolleri standart depolardan kurabilirsiniz.

Ubuntu / debian'da:

apt install megatools

MacOS'ta:

brew install megatools

Kurulduktan sonra, aralarında megadlhem paylaşılan dosyaları hem de kendi dosyalarınızı indirebilen bir dizi komut satırı yardımcı programı bulacaksınız . Ayrıntılar megadl -hiçin bakın.


0

2020 itibariyle, özel kodunuzu tarayıcının yerleşik indirme yöneticisiyle sorunsuz bir şekilde entegre etmek için Hizmet Çalışanlarını kullanabilirsiniz: https://developers.google.com/web/updates/2016/06/sw-readablestreams

Ayrıca, bir dosyanın görüntülenmesi yerine indirilmesi için aşağıdaki başlıklara sahip olduğunuzu da tahmin ediyorum:

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

Şahsen ben bu yaklaşımın hem Firefox'ta hem de Google Chrome'da kusursuz çalıştığını buldum ve zaten üretimde kullanıyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.