gpt4 book ai didi

javascript - Array.includes 无法按预期使用 html 文件上传和 localforage

转载 作者:行者123 更新时间:2023-12-01 00:04:03 26 4
gpt4 key购买 nike

所以基本上我正在制作一个网站,允许用户上传 .txt 文件并在使用移位密码对其进行加密后返回该文件以供下载。

我有以下 HTML 代码

<div class="file-inp mainscreen-row-element level-2 enc">
Upload Text File
</div>
<input type="file" accept=".txt" id="inp-elem" hidden />

如果索引数据库中尚不存在一些数据,我会将其存储在其中

localforage.getItem("encrypton-caesar-cipher").then(d => {
if (d == null) {
localforage.setItem("encrypton-caesar-cipher", {
enc: { inp: { text: [], files: [] }, out: { text: [], files: [] } },
dec: { inp: { text: [], files: [] }, out: { text: [], files: [] } },
ai: { inp: { text: [], files: [] }, out: { text: [], files: [] } }
});
}
});

我的 javascript 包含这段代码

$(".file-inp").on("click", e => {
$("#inp-elem").trigger("click");
$("#inp-elem").on("change", () => {
const f = $("#inp-elem").prop("files");
localforage.getItem("encrypton-caesar-cipher").then(d => {
if (!(d.enc.inp.files.includes(f))) {
d.enc.inp.files.push(f);
localforage.setItem("encrypton-caesar-cipher", d);
}
});
});
});

因此,当用户上传文件时,我在 localForage 的帮助下将对象存储在 indexedDB 中,并且我有这个条件

if (!(d.enc.inp.files.includes(f)))

因为我想确保我没有重复存储相同的对象

现在,如果我上传文件 a.txt 并转到开发工具,它会显示在那里,如果再次上传,我的 indexedDB 数据不会更改,这正是我所期望的,但是当我刷新页面时,并且然后再次上传 a.txt,同一个对象被存储并在开发工具中显示两次,如果我重新加载页面并上传相同的文件,这种情况会继续增加。

我想知道我做错了什么或者是否有可能的解决方法?

最佳答案

问题是两个具有相同内容的 javascript 对象不被视为相等:

const object1 = {foo: 'bar'};
const object2 = {foo: 'bar'};
object1 == object2 // false
// but
object1 == object1 // true

但这适用于像字符串这样的基元:

const string1 = 'foo';
const string2 = 'foo';
string1 == string2 // true

也许您想要的是使用 $("#inp-elem").val() 它代表所选文件的路径而不是文件本身。如果路径不是您想要的,您还可以计算文件内容哈希。

关于javascript - Array.includes 无法按预期使用 html 文件上传和 localforage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60508647/

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