【问题标题】:How to save the window.URL.createObjectURL() result for future use?如何保存 window.URL.createObjectURL() 结果以供将来使用?
【发布时间】:2011-09-29 11:13:17
【问题描述】:

我正在用 HTML5 制作一个应用程序,您可以在其中选择一个视频文件,然后应用程序使用 HTML5 video 标记和 window.URL.createObjectURL() 播放它。问题是我想把这个视频的数据保存在localStorage中,当用户使用我的应用程序时再次播放,但是Mozilla MDN states这个方法的结果:

当文档被卸载时,浏览器会自动释放这些

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

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    我没有用过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 的重复文件内容 - 但我认为不可能在浏览器沙箱之外保持对文件的持久引用。

    【讨论】:

    • 这与 createObjectURL() 不同,因为 createObjectURL() 仅链接到用户机器中的文件,而使用 FileReader 将文件的所有数据放入内存中。这对图片很有效,因为它们不会很重,但是我计划用户使用我的应用程序播放的视频甚至可以达到 1GB,而且你不希望所有这些都进入你的内存保存在您的机器上...
    • 对,但我不认为createObjectURL() 提供了对该文件的持久 引用——这就是卸载页面时它被撤销的原因。允许对文件的持久引用 - 例如通过文件路径 - 将是一个安全问题。这就是为什么我建议您需要保存整个内容。
    • 您将能够向 FileSystem API 写入无限数据(并通过指定 window.PERSISTENT 使其保持持久性)。 window.requestFileSystem(window.TEMPORARY, 10*1024*1024 /*10 MB*/, onInitFs, errorHandler) See the html5Rocks tutorial here 只需设置您希望使用的数据量即可。
    • @nrabinowitz 我有一个问题:stackoverflow.com/questions/67015438/…
    猜你喜欢
    • 1970-01-01
    • 2020-08-24
    • 2023-04-01
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多