在上传文件时为文件指定唯一名称

时间:2013-12-11 10:23:38

标签: node.js

我正在开发一个应用程序,用户可以在其中发布图片。所以我想确保每次pic获得唯一名称。在PHP中,我用来将时间戳与userId连接起来。但是在node.js中我没有得到将时间戳转换为字符串的方法。所以请建议一种确保我的文件不会出现重复名称的方法。

4 个答案:

答案 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 发生名称冲突的可能性极小。