我正在开发一个应用程序,用户可以在其中发布图片。所以我想确保每次pic获得唯一名称。在PHP中,我用来将时间戳与userId连接起来。但是在node.js中我没有得到将时间戳转换为字符串的方法。所以请建议一种确保我的文件不会出现重复名称的方法。
答案 0 :(得分:11)
其中一个解决方案是使用UUID作为文件名。但这当然取决于您的应用程序要求或约束(命名约定等)。但是,如果UUID作为文件名是可以接受的,我建议使用node-uuid
库(非常容易使用!)。
示例代码:
var uuidv4 = require('uuid/v4');
var filename = uuidv4() + '.png'
使用UUID作为唯一标识符是安全的。您可以在SO上找到更多信息,例如: How unique is UUID?
替代解决方案(其中名称唯一性是必需的)将使用另一个node.js库:flake-idgen,它根据当前时间戳生成无冲突的ID。该解决方案可确保唯一数字
该解决方案也非常高效,允许每个生成器在一毫秒内生成多达4096个ID(最多可以有1024个独特的生成器)。
我希望这会有所帮助。
答案 1 :(得分:6)
在节点中:
timestamp = new Date().getTime().toString();
答案 2 :(得分:4)
如果你想使用时间戳uuid使用这个
var uuid = require('uuid');
// Generate a v1 (time-based) id
uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'
// Generate a v4 (random) id
uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'
答案 3 :(得分:0)
//imageExt your file extension;
const imageName = Date.now() + imageExt;
Date.now() 以毫秒为单位返回自 1970 年 1 月 1 日以来的时间, 如果服务器足够快以在不到 1 毫秒的时间内处理 2 个图像,您将丢失一个图像,因为它们都具有相同的名称,
更好的方法是使用 uuidv4
const { v4: uuidv4 } = require("uuid");
const imageName = uuidv4() + imageExt; // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed.jpg'
uuid 发生名称冲突的可能性极小。