Estoy tratando de obtener solo nombres de archivo de imagen para enviar a la consola desde un directorio determinado. Originalmente estaba siguiendo esta respuesta, pero no pude encontrar la manera de darle múltiples extensiones.
¿Cómo obtengo una lista de archivos con una extensión de archivo específica usando node.js?
function fName(fp){ const { readdirSync } = require('fs'); const path = require("path"); const fs = require('fs'); // dont need whole filepaths atm // const gl = require('glob'); //gl(fp + `/**/*.@(jpg|png)`, {}, (err, files) => { // console.log(files) // }) let extensions = ["jpg", "jpeg", "png"]; let nameFilter = []; const rawFileNames = readdirSync(fp, {withFileTypes: true}) .filter(dirent => dirent.isFile()) .map(dirent => dirent.name) //filter the extensions let fileNames = rawFileNames.filter(file => { path.extname(file).toLowerCase() === extensions; }) console.log(fileNames); }EDITAR
También intenté hacer una función que repita la lista de extensiones y llamarla, pero aún devuelve una matriz vacía
let extensions = ["jpg", "jpeg", "png"]; let getexts = function(exte){ for (ex in exte){ return exte[ex]; } } let nameFilter = []; const rawFileNames = readdirSync(fp, {withFileTypes: true}) .filter(dirent => dirent.isFile()) .map(dirent => dirent.name) //filter the extensions let fileNames = rawFileNames.filter(file => { path.extname(file).toLowerCase() === getexts(extensions); })En su filtro, ¿no podría simplemente hacer:
let fileNames = rawFileNames.filter(file => { return extensions.includes(path.extname(file).toLowerCase()) })Modifique su condición de contribuyente como se indica a continuación.
//filter the extensions let fileNames = rawFileNames.filter(file => { return extensions.includes(path.extname(file).toLowerCase()) }); console.log(fileNames);