据我所知,Mega.com 使用这个内部下载管理器是因为他们以加密形式将数据存储在服务器上;加密和解密在浏览器中进行。
存储
您可以使用 IndexedDB 来存储二进制数据。这是tutorial from Mozilla,解释如何使用 AJAX 下载图像并将其保存在 IndexedDB 中。
当您将数据存储在 IndexedDB 中时,您应该有机会下载它(从内部浏览器存储)。 Here you can read,如何创建下载提示。
进度条
使用XMLHttpRequest 时,您可以通过为progress 事件提供处理程序来获取下载进度。
var oReq = new XMLHttpRequest();
oReq.addEventListener("progress", updateProgress, false);
[...]
function updateProgress (oEvent) {
if (oEvent.lengthComputable) {
var percentComplete = oEvent.loaded / oEvent.total;
// ...
} else {
// Unable to compute progress information since the total size is unknown
}
}
如果服务器没有发送带有标题的Content-Length,文件的总大小将不可用。
Full source code and description on MDN.