设置“dataURL”的值超出了配额

Posted

技术标签:

【中文标题】设置“dataURL”的值超出了配额【英文标题】:Setting the value of 'dataURL' exceeded the quota 【发布时间】:2014-07-21 13:50:27 【问题描述】:

我有一个将字符串保存到本地存储的 javascript 代码,字符串大小为 400000,

var dataURL = canvas.toDataURL("image/jpg").toString();
localStorage.setItem("dataURL", dataURL);

我从 chrome 打开 html 文件,在一台计算机上它在我得到的另一台计算机上正常

未捕获的 QuotaExceededError:无法执行“setItem” 'Storage': 设置 'dataURL' 的值超出配额。

在这台计算机上,我允许保存的字符串长度不超过 100000 个字符。 两台电脑都有相同的 chrome 版本 35.0.1916.114 m 为什么?

【问题讨论】:

可能是浏览器中设置的首选项、每台计算机上的可用磁盘空间或其他一些环境差异。 相关问题:***.com/questions/2989284/… 试试这个 try var count = 100; var message = "LocalStorageIsNOTFull"; for (var i = 0; i 【参考方案1】:

当您的浏览器达到最大限制时,它会抛出此错误 无法在“存储”上执行“setItem”:设置“”的值超出了配额。

你可以这样处理

 try 
     var count = 100;
     var message = "LocalStorageIsNOTFull";
     for (var i = 0; i <= count; count + 250) 
         message += message;
         localStorage.setItem("stringData", message);
         console.log(localStorage);
         console.log(count);
     

 
 catch (e) 
     console.log("Local Storage is full, Please empty data");
     // fires When localstorage gets full
     // you can handle error here or empty the local storage
 

【讨论】:

【参考方案2】:

这种类型的错误也可能由于以下原因而发生:

在单个 localStorage 键中存储值是有限制的。

例如,如果我写 localStorage.setItem('data',allData); 那么 'data' 键有一个限制,它可以在 'allData' 值中存储指定数量的字符。

在 chrome 和 firefox 中,您最多可以在一个键中存储 5200000 个字符。您可以访问此网站https://arty.name/localstorage.html

查看浏览器限制

因此,要解决此问题,您必须检查您尝试存储在单个键中的字符数。

如果您超出了 localStorage 键的值大小,则必须将大小减小到适当的限制。

【讨论】:

【参考方案3】:

chrome 本地存储默认为 25M,因此请明确您的 chrome 本地存储是否可以使用。祝你好运!

【讨论】:

What is the max size of localStorage values?你错了。【参考方案4】:

使用localStorage.clear(); 清除本地存储对我有用。

如果您使用的是 Firefox,您可能需要使用 window.localStorage.clear();

【讨论】:

【参考方案5】:

这取决于浏览器偏好和磁盘空间。在https://arty.name/localstorage.html 比较您的两台计算机的浏览器并检查它们是否存储相同的编号。的字符。你会看到区别。

【讨论】:

你说的是对的,但我给出了一个链接,可以证明我试图解释的内容。我不认为我们可以在这里运行代码 sn-p 来给出这些结果。或者有没有办法做到这一点?【参考方案6】:

下面的代码可以让您在本地存储中保存最多的数据量,而不会在存储超出时清除它。

const setInLocalStorage = (keyName, value) => 
  try 
      localStorage.setItem(keyName, JSON.stringify(value));
   catch (error) 
      console.log('Error in local storage', error);
      setInLocalStorage(keyName, JSON.parse(localStorage.getItem(keyName)));
  
;

【讨论】:

以上是关于设置“dataURL”的值超出了配额的主要内容,如果未能解决你的问题,请参考以下文章

如何将图像转换为dataurl

Blob/DataURL/canvas/image的相互转换

如何通过电子邮件发送 dataURL 图片

无法提取dataurl参数怎么解决

带有dataURL href的图像的SVG在某些引擎中无法正确呈现

为什么 jsp页面获取到的dataurl会变成unknow