2011-06-14 15 views
6

ben bu fonksiyonu çağırdığınızda, tarayıcı yalnızca bir indirme penceresi ister ve kesmez, bir dosya Hepimizin bildiği gibiBir URL’den indirmenin ne zaman tamamlandığını nasıl bilebilirim? Benim projede

function promptDownload(file){ 
     location.href = "http://example.com/downloads/"+file; 
} 

indirmek için yönlendirmek için aşağıdaki fonksiyonu gibi bir şey kullanmak benim uygulama akışı. Yapmak istediğim, bu yüklemenin ne zaman tamamlandığını veya iptal edildiğini belirlemektir.

gibi bir şey onLoad, onFinishedLoading, onConnectionEnd veya vb olmamalıdır ama bir şey bulamadık.

+2

yanılıyor olabilirim, ama sana inanmıyorum . Eğer _that_ fazla kontrol istiyorsanız, onu bir el feneri/flash uygulamasına vermeniz ve geri çağrıları gömmeniz gerekebilir. (Bu, kullanıcıyı google.com'a yönlendirmek ve Google'ın yükleme işlemini tamamladığını bilmek gibi). - DÜZENLEME: Ayrıca, her iki eşitleme tutmak için bir sunucu tarafı dosya işleyicisi ve ajax istemci tarafı kullanabilirsiniz, ancak bu çok sıkıcı görünüyor. –

+0

@Brad: [WeTransfer] (https://www.wetransfer.com/) budur. – Midas

cevap

2

Dosyayı bu şekilde indirirseniz indirme ilerlemesini belirleyemezsiniz. Eğer XMLHttpRequest kullanarak dosyayı indirirseniz, o zaman böyle yük, hata ve ilerleme olayları için

dinleyebilirsiniz:

function log(message) { 
    return function() { 
    alert(message); 
    }; 
} 

function download(file, callback) { 
    var request = new XMLHttpRequest(); 
    request.responseType = 'blob'; 
    request.open('GET', file); 
    request.addEventListener('load', log('load ' + file)); 
    request.addEventListener('error', log('error ' + file)); 
    request.addEventListener('progress', log('progress ' + file)); 
    request.addEventListener('load', function() { 
    callback(request.response); 
    }); 
    request.send(); 
} 

function save(object, mime, name) { 
    var a = document.createElement('a'); 
    var url = URL.createObjectURL(object); 
    a.href = url; 
    a.download = name; 
    a.click(); 
} 

document.querySelector('#download').addEventListener('click', function() { 
    download('test.pdf', function (file) { 
    save(file, 'application/pdf', 'test.pdf'); 
    }); 
}); 
<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="UTF-8"> 
    </head> 
    <body> 
    <button id="download">Download</button> 
    <script src="script.js"></script> 
    </body> 
</html> 
İlgili konular