Я создаю функцию загрузки файла в node.js с экспресс-3.
Я хотел бы получить расширение файла изображения. так что я могу переименовать файл, а затем добавить расширение файла к нему.
app.post('/upload', function(req, res, next) {
var is = fs.createReadStream(req.files.upload.path),
fileExt = '', // I want to get the extension of the image here
os = fs.createWriteStream('public/images/users/' + req.session.adress + '.' + fileExt);
});
Как я могу получить расширение изображения в node.js?
javascript
node.js
file-type
georgesamper
источник
источник
Ответы:
Я считаю, что вы можете сделать следующее, чтобы получить расширение имени файла.
источник
app.css.gz
будут только возвращаться,.gz
а не возвращаться.css.gz
, что может или не может быть тем, что вы хотите.filename.split('.').pop();
.
.'filename.css.gz'.split('.').slice(1).join('.')
получить все расширенияjone.lastTest.654654556.tar.gz
здесь, ожидаемое расширение - tar.gz, но если вы примените какую-либо функцию, которая дает форму 1-й точки, она не будет работать, как вы можете видетьОбновить
Поскольку оригинальный ответ, extname () был добавлен в
path
модуль, см. Ответ Snowfish.Оригинальный ответ:
Я использую эту функцию, чтобы получить расширение файла, потому что я не нашел способ сделать это более простым способом (но я думаю, что есть):
Вы должны требовать «путь», чтобы использовать его.
другой метод, который не использует модуль пути:
источник
var is = fs.createReadStream(req.files.upload.path), fileType = is.path.split(/[. ]+/).pop();
Если вы используете экспресс, добавьте следующую строку при настройке промежуточного программного обеспечения (bodyParser)
источник
Гораздо эффективнее использовать
substr()
метод вместоsplit()
&pop()
Посмотрите на различия в производительности здесь: http://jsperf.com/remove-first-character-from-string
Обновление август 2019 г. Как отметил @xentek в комментариях;
substr()
теперь считается устаревшей функцией ( документация MDN ). Вы можете использоватьsubstring()
вместо этого. Разница междуsubstr()
иsubstring()
заключается в том, что второй аргументsubstr()
- это максимальная длина для возврата, в то время как второй аргументsubstring()
- это индекс, на котором нужно остановиться (без включения этого символа). Кроме того,substr()
принимает отрицательные начальные позиции, которые будут использоваться в качестве смещения от конца строки, в то времяsubstring()
как нет.источник
substr
оно считается устаревшей функцией, и ее следует избегать, когда это возможно. Дополнительная информация по MDNЭто решение поддерживает строки запросов!
источник
Простое решение без необходимости в требовании, которое решает проблему многократного продления периода:
Или, если вы не хотите, чтобы начальная точка:
Убедитесь, что у файла тоже есть расширение.
источник
Я думаю, что отображение заголовка Content-Type в запросе также будет работать. Это будет работать даже в тех случаях, когда вы загружаете файл без расширения. (когда имя файла не имеет расширения в запросе)
Предположим, вы отправляете свои данные, используя HTTP POST:
Здесь name Content-Type header содержит тип mime данных. Отображение этого типа MIME на расширение даст вам расширение файла :).
Restify BodyParser преобразует этот заголовок в свойство с типом имени
Вы можете использовать этот заголовок и выполнять сопоставление расширений (подстроку и т. Д.) Вручную, но для этого также есть готовые библиотеки. Ниже двух были лучшие результаты, когда я делал поиск Google
и их использование также просто:
приведенный выше фрагмент выведет png на консоль.
источник
источник
path.extname
сделает свое дело в большинстве случаев. Тем не менее, он будет включать в себя все после последнего.
, включая строку запроса и хеш-фрагмент запроса http:В таких случаях вы захотите попробовать что-то вроде этого:
Обратите внимание, что расширения с несколькими периодами (например,
.tar.gz
) не будут работать вообщеpath.extname
.источник
Следующая функция разбивает строку и возвращает имя и расширение независимо от того, сколько точек в расширении. Возвращает пустую строку для расширения, если ее нет. Имена, начинающиеся с точек и / или пробелов, также работают.
источник
импортируем extname, чтобы вернуть расширение файла:
где файл - это имя файла формы
источник
Вы можете использовать path.parse (путь) , например
источник
Попробуй это
источник