自定义下载管理器 javascript
Custom download manager javascript
一个名为 mega.com 的文件共享网站具有创建自定义下载管理器的功能。下载文件时,它会在网站上显示自定义进度条(大概是将文件加载到缓存中),然后为缓存文件创建下载提示。 javascript 是如何产生的?
据我所知,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
和 headers,则文件的总大小将不可用。
您的问题有完整的答案:http://tonistiigi.github.io/mega/。
如果您想在 JavaScript
中创建下载管理器,这些文章将帮助您完成工作:
如果要创建文件下载进度,请转到此link:Javascript source file download progress?。
Please put more thought, time, and effort into your to make your work done. If you can't, please post a comment bellow my own answer; I will help you to do it detailly.
一个名为 mega.com 的文件共享网站具有创建自定义下载管理器的功能。下载文件时,它会在网站上显示自定义进度条(大概是将文件加载到缓存中),然后为缓存文件创建下载提示。 javascript 是如何产生的?
据我所知,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
和 headers,则文件的总大小将不可用。
您的问题有完整的答案:http://tonistiigi.github.io/mega/。
如果您想在 JavaScript
中创建下载管理器,这些文章将帮助您完成工作:
如果要创建文件下载进度,请转到此link:Javascript source file download progress?。
Please put more thought, time, and effort into your to make your work done. If you can't, please post a comment bellow my own answer; I will help you to do it detailly.