node.js - 如何在nodejs中为上传的文件生成简短的唯一名称

标签 node.js file-upload uniqueidentifier

我需要用短的唯一标识符命名上传的文件,例如 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/

相关文章:

javascript - 为什么 Javascript 显示带有 setTimeout 函数同步和异步的输出?

javascript - 多个文件上传并即时压缩失败

android - 通过匹配adb设备ID的代码获取ID?

angularjs - 多次使用指令时附加唯一 ID

r - 独特元素的值(value)

javascript - 添加 account-ui 包后,Meteor 模板被创建两次

node.js - Nodejs Swagger 无法向请求添加授权 header

javascript - 子进程打开意外的 Electron 窗口

c# - 如何从控制台应用程序将文件上传到 ASP.NET MVC

azure - IFormFileCollection : Cannot access a Disposed Object