gpt4 book ai didi

javascript - 使用 LocalFileSystem 存储和显示图像

转载 作者:行者123 更新时间:2023-11-30 17:58:52 26 4
gpt4 key购买 nike

我尝试编写一些代码来检索图像文件(来自 Wikimedia Commons),将其存储在本地然后显示它。这是我的代码:

<!DOCTYPE html> 
<html>
<head>
<script>

window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;

function onError(e) {
console.log('Error', e);
}

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://upload.wikimedia.org/wikipedia/fr/2/26/10_francs_Mathieu_1987_F365-28_revers.jpg', true);
xhr.responseType = 'blob';

xhr.onload = function(e) {

window.requestFileSystem(PERSISTENT, 1024 * 1024, function(fs) {alert(fs.root.name);}, onError);

window.requestFileSystem(PERSISTENT, 1024 * 1024, function(fs) {
fs.root.getFile('image.jpg', {create: true}, function(fileEntry) {
fileEntry.createWriter(function(writer) {

writer.onwrite = function(e) {};
writer.onerror = function(e) {};

var blob = new Blob([xhr.response], {type: 'image/jpeg'});

writer.write(blob);

}, onError);
}, onError);
}, onError);

window.requestFileSystem(PERSISTENT, 1024 * 1024, function(fs) {
fs.root.getFile('image.jpg', {create: false}, function(fileEntry) {
fileEntry.file(function(file) {
var reader = new FileReader();
reader.onloadend = function(event) {
var img = document.createElement("img");
img.src = event.target.result;

document.body.parentNode.insertBefore(img, document.body.nextSibling);
};
reader.readAsDataURL(file);
}, onError);
}, onError);
}, onError);

};

xhr.send();
</script>
</head>
<body>

</body>
</html>

什么都不显示。 Chrome 的控制台不显示任何错误消息,所以我不知道为什么它不起作用。有什么线索吗?

编辑:

我刚刚看到我实际上得到了一个 FileError,代码 10,这意味着 QUOTA_EXCEEDED_ERR,即使我使用这些参数启动我的谷歌浏览器也是如此:

"C:\Program Files\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files --unlimited-quota-for-files

实际上,无论是否使用 --unlimited-quota-for-files 参数,我都会得到相同的错误,这很奇怪。但是我得到一个没有 --allow-file-access-from-files

的文件错误 2

最佳答案

在回答您关于为什么使用“--unlimited-quota-for-files”启动不起作用的问题时,我认为您混淆了两个不同的东西。该参数只是删除了配额限制,它不会自动预先批准脚本在未经许可的情况下占用沙箱中的空间。如果您使用的是“临时”文件系统请求,那么它会在没有提示的情况下分配它(请参阅我的回答末尾的链接)。

但是正如您需要调用 requestQuota() 方法所经历的那样,Chrome 将不允许在没有明确的用户许可的情况下分配持久文件系统存储。这有几个原因,但安全是最好的:也就是说,如果 Chrome 按需(在用户不知情的情况下)将持久文件系统存储分配给任何请求它的脚本,那么恶意脚本可以快速轻松地填充用户的硬盘驱动器,由于成千上万的对象导致 Chrome 内存崩溃,并造成普遍的困惑。这样的漏洞还可能通过像这样敲击内存来触发缓冲区溢出。

底线:Chrome 仅允许在用户批准的情况下进行持久文件系统存储。更多来自谷歌:Managing HTML5 Offline Storage:Persistent storage

关于javascript - 使用 LocalFileSystem 存储和显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17523201/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com