Вам нужно добавить что-то уникальное в имя файла каждого загруженного файла. Самый простой (вероятно, не самый лучший) способ - добавить текущую метку времени.
Синтаксис для добавления файлов в объект FormData: formData.append(name, value);
или formData.append(name, value, filename);
. Если вы используете первую версию и пропускаете аргумент filename
, по умолчанию используется атрибут name
file
. MDN
В вашем случае вам не нужно имя файла по умолчанию, вам нужно добавить к нему метку времени.
Вы можете получить текущую метку времени, используя Date.now()
или new Date().getTime()
. В этом случае лучше использовать Date.now()
, потому что он более чем в два раза быстрее (и тоже меньше печатает), чем new Date().getTime()
.
Таким образом, теперь вы можете создать уникальное имя файла, например:
`${Date.now()}_${file.name}`
Мы ставим время на первое место, потому что file.name
содержит расширение файла, и вы этого хотите.
Это сгенерирует что-то вроде этого '1553690001341_whatever.jpg'
Но если сначала указать имя файла, вы получите 'whatever.jpg_1553690001341'
, и поэтому файл не будет сохранен с расширением файла на сервере, и если кто-то загрузит его с сервера, он не будет знать, как его открыть.
Также мы используем обратные тики для использования переменных внутри строки, это просто немного упрощает ситуацию. Если вы не используете обратные метки, вы можете получить тот же результат, используя +
, например:
Date.now() + '_' + file.name
Теперь все, что вам нужно сделать, это добавить имя файла при добавлении файла в FormData. Так что пиши
fd.append('file', file, `${Date.now()}_${file.name}`);
вместо
fd.append('file', file);
PS: Подобные вещи должны обрабатываться бэкэнд API