【问题标题】:JavaScript save blob to localStorageJavaScript 将 blob 保存到 localStorage
【发布时间】:2014-01-27 07:49:01
【问题描述】:

我正在尝试将通过 AJAX 检索到的 blob 数据(网站图标)保存到 localStorage

代码:

var xhr = new XMLHttpRequest();
xhr.open('GET', 
'http://g.etfv.co/http://www.google.com',
true);
xhr.responseType = "blob";
xhr.onload = function(e){ //Stringify blob...
    localStorage['icon'] = JSON.stringify(xhr.response);
    //reload the icon from storage
    var fr = new FileReader();
    fr.onload = 
        function(e) {
            document.getElementById("myicon").src = fr.result;
        }
    fr.readAsDataURL(JSON.parse(localStorage['icon']));
    }
xhr.send(null);

代码改编自here,稍作修改以使其适用于localStorage。 localStorage 将所有数据保存为字符串,因此在保存之前,blob 需要以某种方式字符串化

JSON 不将 blob 作为其支持的类型之一来处理,因此此代码失败也就不足为奇了。

有什么方法可以将 blob 放入 localStorage?

【问题讨论】:

  • 不确定,只是一个镜头,但如果您的请求响应是二进制文件本身,那么您直接将其保存在 localStorage..
  • 啊抱歉,我在考虑 indexeddb,没关系。
  • @XGreen 哟,伙计!那不是问题,那是博士论文。无论如何都会检查一下。

标签: javascript json html blob web-storage


【解决方案1】:

只需将 blob 作为数据 uri 存储在本地存储中

var xhr = new XMLHttpRequest();
xhr.open('GET', 
'http://g.etfv.co/http://www.google.com',
true);
xhr.responseType = "blob";
xhr.onload = function(e){ //Stringify blob...
    //reload the icon from storage
    var fr = new FileReader();
    fr.onload = 
        function(e) {
            localStorage['icon'] = e.target.result;
            document.getElementById("myicon").src = localStorage['icon'];
        }
    fr.readAsDataURL(xhr.response);
}
xhr.send(null);

【讨论】:

  • 好吧,至少这是低效的。尝试将xhr.response.size()e.target.result.length 进行比较。但我最终可能会诉诸于此。
  • 它大了 33% 以上(base64 编码),但这是我所知道的将 blob 转换为可用字符串的唯一方法。也许如果您找到更好的方法,您可以将其发布为答案。
  • 如果我要存储网站图标,它们会很多,加上其他数据,所以所有网站图标都可以从可用的 5mb 中占用 1mb
猜你喜欢
  • 2013-03-19
  • 2017-11-03
  • 2013-11-22
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
  • 2018-04-20
  • 2021-08-22
  • 2014-03-11
相关资源
最近更新 更多