如果以这种方式下载文件,则无法确定下载进度。
如果你下载使用XMLHttpRequest
文件,那么你可以听这样的负载,错误和进度事件:
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>
我可能是错的,但我不相信你可以。如果你想控制很多,你可能需要将它交给Silverlight/Flash应用程序并嵌入回调函数。 (这就像将用户重定向到google.com并知道google何时完成加载)。 - 编辑:你也许可以使用服务器端文件处理程序和ajax客户端来保持同步,但这似乎非常繁琐。 – 2011-06-14 15:28:08
@Brad:这就是[WeTransfer](https://www.wetransfer.com/)所做的。 – Midas 2011-06-14 15:31:57