javascript - 如何保存 window.URL.createObjectURL() 结果以供将来使用?

标签 javascript html

我正在用 HTML5 创建一个应用程序,您可以在其中选择一个视频文件,然后该应用程序使用 HTML5 video 标签和 window.URL.createObjectURL()。问题是我想将有关此视频的数据保存在 localStorage 中,并在用户使用我的应用程序时再次播放,但显示为 Mozilla MDN states关于此方法的结果:

Browsers will release these automatically when the document is unloaded

那么我想做的事情有可能吗?或者在没有 window.URL.createObjectURL() 但使用其他东西的情况下做同样的事情?

最佳答案

我没有使用过 createObjectURL(),但如果我理解正确的话,它本质上是对文件或内存中对象的临时引用。如果你想保存实际的视频,它就没有用了,因为下次用户访问应用程序时,视频本身将不再被这个指针引用。

认为您可以使用 data: URL 来完成此操作,因为该 URL 实际上包含文件中的完整数据。 This example演示了如何使用 FileReader 生成数据 URL。我认为你应该能够做到这一点:

var reader = new FileReader();  
reader.onload = function(e) { 
    var myDataUrl = e.target.result;
    // do something with the URL in the DOM,
    // then save it to local storage
};  
reader.readAsDataURL(file);

更新:如果您想增加到 1GB,正如您在评论中指出的那样,FileSystem API 可能会更好地为您服务。 .这将需要您获取本地文件,将文件的副本 保存到永久文件系统存储,然后使用createObjectURL() 获取文件副本的URL。您仍然存在磁盘空间问题 - 您刚刚向用户的文件系统添加了 1GB 的重复文件内容 - 但我认为否则不可能在浏览器沙箱之外保持对文件的持久引用。

关于javascript - 如何保存 window.URL.createObjectURL() 结果以供将来使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7596515/

相关文章:

Javascript 所见即所得逻辑

html - 如何在按钮出现/消失时保持 Bootstrap 行高相同

c# - 如何在 MVC 5 中使用 jQuery AJAX 和 setInterval 加载 div?

javascript - 找到一个不等于这个类的 div

javascript - 我可以保证 onreadystatechange 最终总是会在 readState == 4 的情况下被调用吗?

javascript - 如何使用 TR 滚动选项框?

javascript - 如何检查each()迭代以promise()结束

javascript - 使用 URL 哈希删除特定 div 上的事件类

javascript - 如何在每个中捕获 div 高度并在另一个中设置?

javascript - 如何查询数据库并动态绘制仪表板上的值?