问答1 问答5 问答50 问答500 问答1000
网友互助专业问答平台

在?localStorage?中上传和检索存储图像的示例详解

提问网友 发布时间:2025-01-23 18:18
声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:1656858193@qq.com
1个回答
热心网友 回答时间:2025-01-23 19:08

本地存储允许将数据作为键/值对存储在浏览器中。此数据没有设置的到期日期,并且在关闭浏览器时不会被清除。只有字符串值可以存储在本地存储中。示例:存储照片集


这个例子的前提是允许用户上传一组照片。成功上传后,他们的照片将被渲染,并且能够从收藏中删除照片。添加和删除照片也会导致浏览器的 localStorage 更新。此页面的现场演示可以在我的 JSFiddle 账户上找到:https://jsfiddle.net/sbhomra/bts3xo5n/。


HTML


!DOCTYPE html


html


head


title Storing Images in Local Storage /title


meta charset="UTF-8" /meta


meta name="viewport" content="width=device-width, initial-scale=1.0" /meta


/head


body


div


h1 Example: Storing Images in Local Storage /h1


input id="image-upload" type="file" /input


ul id="image-collection" /ul


/div


script src="https://code.jquery.com/jquery-3.6.0.min.js" /script


script src="script.js" /script


/body


/html


JavaScript


const fileUploadLimit = 1048576; // 1MB in bytes. Formula: 1MB = 1 * 1024 * 1024.


const localStorageKey = "images";


let imageData = []; // Render image in HTML by adding to the unordered list.


function renderImage(imageObj, $imageCollection) { if (imageObj.file_base64.length) { $imageCollection.append("liimg src=\"data:image/png;base64," + imageObj.file_base64 + "\" width=\"200\" /br /" + imageObj.name + "br /a href=\"#\" data-timestamp=\"" + imageObj.timestamp + "\" class=\"btn-delete\"Remove/a/li") }}


function addImage(imageObj) { imageData.push(imageObj); localStorage.setItem(localStorageKey, JSON.stringify(imageData));}


function removeImage(timestamp) { // Remove item by the timestamp. imageData = imageData.filter(img = img.timestamp !== timestamp); // Update local storage. localStorage.setItem(localStorageKey, JSON.stringify(imageData));}


function getImages($imageCollection) { const localStorageData = localStorage.getItem(localStorageKey); if (localStorageData !== null) { imageData = JSON.parse(localStorage.getItem(localStorageKey)) for (let i = 0; i < imageData.length; i++) { renderImage(imageData[i], $imageCollection); } }}


function deleteImageAction() { $(".btn-delete").on("click", function(e) { e.preventDefault(); removeImage($(this).data("timestamp")); // Remove the HTML markup for this image. $(this).parent().remove(); })}


function uploadChangeAction($upload, $imageCollection) { $upload.on("change", function(e) { e.preventDefault(); // Ensure validation message is removed (if one is present). $upload.next("p").remove(); const file = e.target.files[0]; if (file.size > { const base64String = reader.result .replace('data:', '') .replace(/^.+,/, ''); // Create an object containing image information. let imageObj = { name: "image-" + ($imageCollection.find("li").length + 1), timestamp: Date.now(), file_base64: base64String.toString() }; // Add To Local storage renderImage(imageObj, $imageCollection) addImage(imageObj); deleteImageAction(); // Clear upload element. $upload.val(""); }; reader.readAsDataURL(file); } else { $upload.after("pFile too large/p"); } });}


$(document).ready(function() { getImages($("#image-collection")); // Set action events. uploadChangeAction($("#image-upload"), $("#image-collection")); deleteImageAction();});


要查看的关键功能是:添加图片()删除图像()获取图像()


这些函数中的每一个都使用 JSON 方法将上传的照片存储为对象数组。每张照片包含:名称、时间戳和一个 base64 字符串。这些函数中使用的一个常见功能是使用 JSON 方法来帮助我们将照片集合存储在本地存储中:JSON.stringify()- 将数组转换为字符串。JSON.parse()- 将 JSON 字符串转换为对象数组以进行操作。


从本地存储中保存或检索保存的值时,需要通过键设置唯一标识符。在我的示例中,我设置了以下在需要使用localStorage方法时引用的全局变量。const localStorageKey = "images";


保存到 localStorage 时,我们必须对对象数组进行字符串化:localStorage.setItem(localStorageKey, JSON.stringify(imageData));


检索我们的数组需要我们将值从字符串转换回对象:imageData = JSON.parse(localStorage.getItem(localStorageKey))


在我们上传了一些图片之后,我们可以通过进入您的浏览器(对于 Firefox)Web 开发人员工具,导航到存储选项卡并选择您的站点来查看存储的内容。如果使用 Chrome,请转到应用程序选项卡并单击本地存储。存储限制


可以存储的值的最大长度因浏览器而异。数据大小目前介于 2MB 和 10MB 之间。当我决定使用本地存储来存储用户照片时,我担心超出存储限制,因此我将每张照片的上传限制设置为 1MB。当我有机会在真实场景中使用我的代码时,我打算使用Hermite Resize来实现一些图像压缩和调整大小的技术。

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

夏天一天喝多少水才最好 其实夏天喝水也要适度哦 豆腐的制作工艺有什么? 卤味包装设计公司 家用笔记本电脑买多大尺寸合适 家用笔记本电脑买多大内存的好 家用笔记本电脑怎么选配置 请问华为手机怎么查运动轨迹啊? 个人发手机如何发顺丰特快快递 交通事故责任认定书下达后,对方拒绝赔付怎么办 遭遇交通事故责任全在对方却不肯给予赔偿应该如何处理 无效合同中的哪些条款仍具效力? 合同无效结算条款具有效力吗 无效合同条款的法律效力 重大事故划分标准是哪些 道路交通事故的分级 借款合同纠纷的起诉地点是哪里 合同纠纷去哪里解决, 合同纠纷到哪里起诉 云顶s11阵容剪纸天使选什么 云顶之弈s9赛季裁决天使怎么玩 详细玩法攻略分享 板框过滤机的优缺点是什么?适用于什么场合? MVC 上传图片,裁剪头像 带你用VUE实现上传图片效果 怎么将老年机的每一个手机号码设置成一个数字按键这样只要按一个按键... 七个机器虎组成个机器人那个动画片叫什么 淘宝新开店铺什么时候没有新开店铺标志?大概多久? 淘宝新开店铺标志什么时候去掉?一般多久? 华为荣耀8x怎么恢复备份相册 QQ相册可找回已删除相片! qq网址格式怎么写 手抄报边框怎么画 简单 电脑开机显示器键盘无反应 网络电视盒子用哪个好 网络电视盒哪个好用 网络高清盒子哪个好 电视网络盒子哪个好 网络电视盒 哪个好 【起球原因】衣服起球的原因 起球是质量问题吗 起球算质量问题吗 如何判定属于正态分布 股市停盘几天?今年中秋节? 怎样把第二个微信隐藏起来
Top