Logo

Multer agregar extensión a archivos con nodejs express

Escrito por
27 de enero de 2023
Multer agregar extensión a archivos con nodejs express

Cuando usas multer para poder recibir archivos de lado del servidor (backend), se guarda sin extensión, resulta complicado poder usar este archivo sin extensión, entonces ahora les muestro la forma de como agregar la extensión.

Multer es un middleware de Node.js que se utiliza para manejar archivos de carga en aplicaciones web. Ayuda a procesar y almacenar archivos enviados a través de formularios HTML.

Para agregar la extensión Multer a una aplicación, primero debes instalarlo mediante npm:

npm install multer

Ahora les comparto el código completo para que puedan visualizar la forma como se agrega la extensión.

import express from 'express'
import multer from 'multer'
import path from 'path'
const router = express.Router()


var storage = multer.diskStorage({
    destination: function (req, file, cb) {
      cb(null, 'upload/')
    },
    filename: function (req, file, cb) {
        const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9)
        cb(null, file.fieldname + '-' + uniqueSuffix+path.extname(file.originalname))
        
      }
  })

const upload = multer({storage:storage})

router.post('/upload',upload.single("file"),(req,res)=>{
    const title = req.body.file
    const file = req.file;
    console.log(title)
    console.log(file)
    res.json({message:"SuccessFully upload files"})
})

export default router

Aquí una imagen donde se usa antes multer.diskStorage, en este método podemos ver, que tenemos acceso al file por ende podemos realizar búsqueda de la extensión del archivo a cargar, es por eso que usamos path.extname para poder obtenerlo.

La función path.extname() de Node.js es utilizada para obtener la extensión de un archivo a partir de su nombre de ruta. La función toma una ruta de archivo como su único argumento y devuelve la extensión del archivo como una cadena, incluyendo el punto (.) al principio.

Por ejemplo:

Copy codeconst path = require('path');

const filePath = '/path/to/example.txt';
console.log(path.extname(filePath));  // Output: '.txt'

También es posible utilizar esta función para obtener la extensión de un archivo en una ruta dinámica,

Copy codeconst path = require('path');
const ext = path.extname(req.file.originalname);

Es importante tener en cuenta que si la ruta no contiene una extensión, la función devolverá una cadena vacía.

Copy codeconst path = require('path');

const filePath = '/path/to/example';
console.log(path.extname(filePath));  // Output: ''

En resumen, la función path.extname() es una forma rápida y sencilla de obtener la extensión de un archivo a partir de su ruta.

En conclusión multer nos da la facilidad y la libertad de poder manejar la extensión a nuestra necesidad, y con la ayuda de path.extname podemos obtener la extensión y guardarlo en nuestro servidor. Espero poder haberte ayudado con este pequeño tutorial.

Más Noticias

Diputados aprueban en lo general la extinción de INAI, IFT y otros organismos autónomos

(Foto: Cuartoscuro) En Cámara de Diputados fue aprobado en lo general, con 347 votos a favor, 128 en contra y 0 abstenciones el dictamen que plantea la extinción de organismos…

Ordenaron la prisión preventiva para el hijo de la princesa heredera de Noruega acusado de violación

Marius Borg Høiby enfrenta una segunda acusación de violación (Håkon Mosvold Larsen / NTB / AFP / Norway OUT) La Justicia de Noruega ha decretado este miércoles prisión preventiva para…

La Justicia de Ecuador condenó a diez años de cárcel al cuñado del ex presidente Guillermo Lasso

La Justicia de Ecuador condenó a diez años de cárcel al cuñado de Guillermo Lasso La Justicia de Ecuador condenó este miércoles a diez años de cárcel a Danilo Carrera,…

Hombre de Florida fue arrestado por planear un ataque con bombas contra la Bolsa de Nueva York, según el FBI

En octubre, Yener pidió herramientas para fabricar un artefacto explosivo, identificando la Bolsa de Nueva York como objetivo. (AP Foto/Peter Morgan, Archivo) El Buró Federal de Investigaciones (FBI) arrestó el…