Node.js 在上载文件时为文件指定唯一名称

Node.js 在上载文件时为文件指定唯一名称,node.js,Node.js,我正在开发一个应用程序,用户可以在其中发布图片。所以我想确保每次图片都有唯一的名称。在PHP中,我使用将时间戳与用户ID连接起来。但是在node.js中,我没有获得将时间戳转换为字符串的方法。因此,请建议一种方法,以确保我的文件不会获得重复的名称。在节点中: timestamp = new Date().getTime().toString(); 解决方案之一是使用UUID作为文件名。但这当然取决于您的应用程序需求或约束(命名约定等)。然而,若UUID作为文件名是可以接受的,我建议使用库(非常

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

在节点中:

timestamp = new Date().getTime().toString();

解决方案之一是使用UUID作为文件名。但这当然取决于您的应用程序需求或约束(命名约定等)。然而,若UUID作为文件名是可以接受的,我建议使用库(非常容易使用!)

示例代码:

var uuidv4 = require('uuid/v4');
var filename = uuidv4() + '.png'
使用UUID作为唯一标识符是安全的。你可以在上面找到更多信息

替代解决方案(其中名称唯一性是一项要求)是使用另一个node.js库:该库根据当前时间戳生成无冲突ID。这种解决方案保证了数字的唯一性

该解决方案也非常高效,允许每个生成器在毫秒内生成多达4096个ID(您最多可以有1024个唯一的生成器)


我希望这会有所帮助。

如果您想使用时间戳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' 
Date.now()返回自1970年1月1日以来的时间(毫秒), 如果服务器速度足够快,可以在不到1毫秒的时间内处理2个图像,则会丢失一个图像,因为它们都具有相同的名称

更好的方法是使用uuidv4

const { v4: uuidv4 } = require("uuid");

const imageName = uuidv4() + imageExt; // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed.jpg'

uuid发生名称冲突的可能性极低。

这并没有回答如何将时间戳作为字符串获取的问题,但更适合生成唯一的文件名。@TheHippo这是真的,我没有提供将时间戳与用户id连接起来的答案。我专注于
。。。建议一种方法来确保我的文件不会有重复的名称
——不同的方法,正如您所说,这是更好的选择;)这返回类似于:
1499264027973
Unix时间不是一个好的解决方案,因为可以同时处理多个请求。不管这是否发生,但这是可能的。
const { v4: uuidv4 } = require("uuid");

const imageName = uuidv4() + imageExt; // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed.jpg'