【发布时间】:2017-03-22 16:38:50
【问题描述】:
我需要下载大约64mb大小的六个视频,将它们存储在localStorage中以避免使用数据(不是wifi)再次下载它。问题是我执行了以下代码:
var urlVideo = "<link_of_mp4_file>"
var videoStorage = localStorage.getItem("video"),
videoElement = document.getElementById("video"),
sourceElement = document.getElementById("source_video");
if (videoStorage) {
// Reuse existing Data URL from localStorage
sourceElement.setAttribute("src", videoStorage);
}
else {
// Create XHR, Blob and FileReader objects
var xhr = new XMLHttpRequest(),
blob,
fileReader = new FileReader();
xhr.open("GET", urlVideo, true);
// Set the responseType to arraybuffer. "blob" is an option too, rendering manual Blob creation unnecessary, but the support for "blob" is not widespread enough yet
xhr.responseType = "arraybuffer";
xhr.addEventListener("load", function () {
if (xhr.status === 200) {
// Create a blob from the response
blob = new Blob([xhr.response], { type: "video/mp4" });
// onload needed since Google Chrome doesn't support addEventListener for FileReader
fileReader.onload = function (evt) {
// Read out file contents as a Data URL
var result = evt.target.result;
// Set image src to Data URL
videoElement.setAttribute("src", result);
// Store Data URL in localStorage
try {
localStorage.setItem("video", result);
}
catch (e) {
console.log("Storage failed: " + e);
}
};
// Load blob as Data URL
fileReader.readAsDataURL(blob);
}
}, false);
// Send XHR
xhr.send();
}
测试此脚本后,我可以从浏览器中看到 mp4 文件正在下载,但是当它完成将视频保存在 localStorage 中的任务时,它会抛出以下错误:
存储失败:QuotaExceededError:无法在“存储”上执行“setItem”:设置“视频”的值超出了配额。
如何将这些文件存储在 localStorage 中?
【问题讨论】:
-
你不能把这么大的东西保存到你的客户端存储中^^。
-
LocalStorage 对于二进制数据是错误的。 LocalStorage 仅适用于小型键/值对。 IndexedDB 或 FileSystem 更适合在客户端存储 blob。 LocalStorage 大小有限... IndexedDB 和文件系统可以请求获得更多配额的权限
-
我建议你看看cache api
标签: javascript html video local-storage