Javascript 如果名称已被使用,是否附加数字?

Javascript 如果名称已被使用,是否附加数字?,javascript,jquery,Javascript,Jquery,在Javascript中,我有一个脚本,允许我将文件上载到服务器,然后检索输出。输出的一个组成部分是上载的文件名。例如,输出名称可能如下所示: test.pdf var title = $('#file')[0].files[0]["name"]; if (localStorage.getItem(title)) { alert("same name"); } localStorage.setItem(title, data); 然后将test.pdf的内容保存到localStorage

在Javascript中,我有一个脚本,允许我将文件上载到服务器,然后检索输出。输出的一个组成部分是上载的文件名。例如,输出名称可能如下所示:

test.pdf
var title = $('#file')[0].files[0]["name"];
if (localStorage.getItem(title)) {
  alert("same name");
}
localStorage.setItem(title, data);
然后将
test.pdf
的内容保存到
localStorage
键中,项目名称为文件名:
localStorage.setItem(名称、数据)

这可以正常工作,但当文件名与正在上载和检索的文件名相同时,情况就不一样了

我的意思是,如果用户上传一个名为
hello34.pdf
的文件,它会将该文件的名称和内容保存到LS键中。但是,如果他们再次上载相同的文件,或者上载具有相同名称的不同文件,则将使用相同名称替换当前文件

为了解决这个问题,我需要能够在文档标题的末尾附加一个数字,这样您就可以在LS中拥有相同名称的文件的多个版本

我知道我可以检查该文件是否与已上载的文件同名,如下所示:

test.pdf
var title = $('#file')[0].files[0]["name"];
if (localStorage.getItem(title)) {
  alert("same name");
}
localStorage.setItem(title, data);
但是从那以后,我不知道如何在结尾加上一个数字。我认为正则表达式不适合这样做,因为:

if (title.match(/[\.pdf ]\d/g) != null) {
    var number = title.match(/[\.pdf ]\d/g) + 1;
} else {
    var number = "1";
}
依赖于结尾的
.pdf
扩展名,JS正则表达式通常不好


有更好的方法吗?我应该以不同的方式索引文件名吗

您不能将文件存储在数组中吗?类似这样的东西(徒手):


如果您确实决定通过正则表达式路由,则会在标题字符串的末尾找到一个数字,然后将其递增1-

var title = "hello.pdf1"

if (title.match(/(\d+)$/)) {
    var number = parseInt(title.match(/(\d+)$/)[1],10) + 1;
} else {
    var number = "1";
}

由于localStorage将所有项存储为字符串,因此开发人员需要跟踪用于索引该数据的键。上传时,不会复制实际文件;只有密钥将被复制。
也就是说,我只需为上传的每个文件附加一个唯一的ID,如下所示:

fileName = test.pdf
fileKey = test.pdf#1
然后将文件名作为密钥存储在本地存储器中,该值将是您目前的“版本”,例如:

localStorage.setItem("test.pdf", "1");
然后,您可以为每个新版本增加该值,轻松获取下一版本的密钥,并将文件存储在本地存储器中,如下所示:

localStorage.setItem("test.pdf#1", "file data here");
这有意义吗

编辑(示例):

--要存储数据,请执行以下操作:

var title = $('#file')[0].files[0]["name"];
var revNo = 1;
if (localStorage.getItem(title)) {
  revNo = localStorage.getItem(title);
  revNo++;
}
localStorage.setItem(title, revNo);
localStorage.setItem(title + "#" + revNo, data);
var title = $('#file')[0].files[0]["name"];
var revNo = 1;
if (localStorage.getItem(title)) {
  revNo = localStorage.getItem(title);
}
// get the latest revision
var data = localStorage.getItem(title + "#" + revNo);
--要检索数据,请执行以下操作:

var title = $('#file')[0].files[0]["name"];
var revNo = 1;
if (localStorage.getItem(title)) {
  revNo = localStorage.getItem(title);
  revNo++;
}
localStorage.setItem(title, revNo);
localStorage.setItem(title + "#" + revNo, data);
var title = $('#file')[0].files[0]["name"];
var revNo = 1;
if (localStorage.getItem(title)) {
  revNo = localStorage.getItem(title);
}
// get the latest revision
var data = localStorage.getItem(title + "#" + revNo);

您可能有两个以上同名文件

var title= $('#file')[0].files[0]["name"];
if(localStorage.getItem(title)){
    var n= 1;
    while(localStorage.getItem(title+n)) n+= 1;
    title= title+n;
}
localStorage.setItem(title, data);

这似乎是最简单的方法。你能在这个场景中实现吗:你能提供一个例子吗?