javascript - 如何通过使用唯一名称保存到本地存储来上传图像?
问题描述
我是一个完整的初学者,几天前才开始自学代码,所以如果这不是正确的方法,请随时让我知道你将如何做。
我正在尝试使用 javascript 将多个图像上传到网页上。到目前为止,我已经能够将数据 URL 保存到本地存储,但是每次我选择一个新文件时,保存的 URL 都会被覆盖。然后,当我单击“选择文件”时,所有图像都变得相同。有没有办法用唯一的名称保存数据 URL,而不必每次都在 javascript 中更改它?
HTML:
<!DOCTYPE html>
<html>
<head>
<title>||Working with elements||</title>
</head>
<body>
<div id="div1">The text above has been created dynamically.</div>
<div>
<label for="name"></label>
<input type="file" id="name">
</div>
</body>
<script src="test.js">
</script>
</html>
JS:
window.addEventListener('load', function() {
document.querySelector('input[type="file"]').addEventListener('change', function() {
if(this.files && this.files[0]) {
const x = document.querySelector('img');
x.src = URL.createObjectURL(this.files[0]);
}
});
});
document.querySelector("#name").addEventListener("change", function() {
const reader = new FileReader();
reader.addEventListener("load", () => {
sessionStorage.setItem("recent-image", reader.result);
});
reader.readAsDataURL(this.files[0]);
});
document.body.onclick = addElement;
function addElement () {
// create a new div element
const newDiv = document.createElement('img');
const nameInput = document.querySelector('#name');
document.addEventListener("click", () => {
const recentImageDataURL = sessionStorage.getItem("recent-image");
if (recentImageDataURL) {
newDiv.setAttribute("src", recentImageDataURL);
}
});
const currentDiv = document.getElementById("div1");
document.body.insertBefore(newDiv, currentDiv);
}
解决方案
您的session-store -entry 的键始终相同:recent-image
.
您需要为每个图像使用不同的唯一键。然后,您需要一种方法来选择要显示的这些键中的哪一个。
(或者,您可以存储包含所有图像的列表或集合,而不是每个键仅一个图像。)
有许多不同的方法可以创建唯一键,因为有许多不同的方法来定义唯一的含义。有很多关于创建唯一键的信息,但这个主题比人们想象的要复杂。准备好大量阅读,或者只是选择一种目前就足够好的简单方法。例如
- 使用计数器
- 以毫秒为单位使用当前日期时间
- 使用随机数
- 以上的组合
一个简单的解决方案是这样的:
let recentImageId = '';
// ...
//-- a very simple 'unique key' function
const getUniqueImageId = function(){
return 'image_' + Date.now();
}
// ...
recentImageId = getUniqueImageId();
sessionStorage.setItem(recentImageId, reader.result);
// ...
const recentImageDataURL = sessionStorage.getItem(recentImageId);
推荐阅读
- python - 如何使用 Pycharm 运行 fast-api 服务器?
- node.js - 当我尝试使用 uuid 包时,如何解决“意外令牌'导出'”错误?
- pandas - Pandas Correlation - 如何使用 df.corr() 忽略两列中的 0
- spring-webflux - 在 Spring Gateway 预过滤器中检查数据库的访问权限
- python - 异步 WebDriverWait until 在 Python 的 selenium
- reactjs - 太多的重新渲染。设置状态时
- c# - 获取与类型关联的所有命名空间?
- php - 错误不能使用 Omnipay\Stripe\Message\Response 类型的对象作为数组
- ios - 如何在 Xcode 中创建两个静态库,其中一个依赖于另一个?
- reactjs - handleSubmit 功能在 React 的功能组件中不起作用