我需要用短的唯一标识符命名上传的文件,例如 nYrnfYEv
a4vhAoFG
hwX6aOr7
。如何确保文件的唯一性?
最佳答案
更新: shortid已弃用。使用Nano ID反而。下面的答案也适用于 Nano ID。
(发布我的评论作为答案,并回复您的疑虑)
您可能想查看 shortid NPM 模块,它生成短 ID(令人震惊,我知道 :))类似于您发布的示例。结果是可配置的,但默认情况下它是一个 7 到 14 个字符之间的字符串(长度也是随机的),所有 URL 友好(正则表达式中的 A-Za-z0-9\_\-
) .
回答您(和其他发帖人)的担忧:
- 除非您的服务器具有真正的随机数生成器(极不可能),否则每个解决方案都将使用 PRNG(伪随机数生成器)。 shortid 使用 Node.js 加密模块来生成 PRNG 数字,然而,它比 Math.random() 更好的生成器
- shortid 不是连续的,这使得猜测它们变得更加困难
- 虽然不能保证 shortid 是唯一的,但发生冲突的可能性非常小。除非您每年生成数十亿条条目,否则您可以放心地假设永远不会发生冲突。
- 在大多数情况下,依靠概率相信不会发生冲突就足够了。如果您的数据太重要而不能冒那么一点点的风险,您可以通过在其前面加上时间戳来使 shortid 基本上 100% 唯一。作为一个额外的好处,文件名也将更难猜测。 (注意:我写了“基本上 100% 唯一”,因为理论上,如果在同一时间戳(即同一秒)中生成两个项目,您仍然可能会发生冲突。但是,我永远不会担心这一点。要有一个真正 100% 确定您唯一的选择是检查数据库或文件系统,但这需要更多资源。)
- shortid 本身不这样做的原因是,对于大多数应用程序来说,发生冲突的可能性太小而不必担心,而拥有尽可能短的 id 更为重要。
关于node.js - 如何在nodejs中为上传的文件生成简短的唯一名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29605672/