2013-12-11 5 views
8

Я разрабатываю приложение, в котором пользователи могут публиковать фотографии. Поэтому я хочу, чтобы каждый раз, когда pic получает уникальное имя. В PHP я использую для конкатенации метки времени с помощью userId. Но в node.js я не получаю метод для преобразования timestamp в строку. Так что любезно предложите способ гарантировать, что мои файлы не получат повторяющиеся имена.Предоставление уникальных имен файлам при их загрузке

ответ

10

Одним из решений было бы использовать UUID для имени файла. Но это, конечно, зависит от требований или ограничений приложений (соглашение об именах и т. Д.). Однако, если UUID в качестве имени файла будет приемлемым, я рекомендую использовать библиотеку node-uuid (очень проста в использовании!).

Пример кода:

var uuidv4 = require('uuid/v4'); 
var filename = uuidv4() + '.png' 

Это безопасно использовать UUID в качестве уникального идентификатора. Вы можете найти больше об этом на SO, например. How unique is UUID?

Альтернативное решение (где имя уникальность является обязательным требованием) будет использовать другую библиотеку Node.js: flake-idgen, который генерирует идентификаторы бесконфликтных на основе текущей временной метки. Это решение гарантирует уникальные номера.

Решение также очень эффективно, позволяет генерировать до 4096 идентификаторов в миллисекунде на генератор (у вас может быть до 1024 уникальных генераторов).

Я надеюсь, что это поможет.

+0

Это не дает ответа на вопрос, как получить временную метку в виде строки, но это лучше для создания уникальной имена файлов. – TheHippo

+0

@ TheHippo, это правда, я не предоставил ответ на метку времени конкатенации с идентификатором пользователя. Я сосредоточился на «... предложить способ убедиться, что мои файлы не получают дубликатов имен» - другой подход, который, как вы сказали, лучше альтернативен;) С уважением. – Tom

5

В узле:

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

Это возвращает что-то вроде: '1499264027973' –

4

Если вы хотите использовать использовать TIMESTAMP 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' 
Смежные вопросы