plantillas node extname javascript node.js file-type

javascript - extname - Node.js obtener extensión de archivo



plantillas node js (9)

¡Esta solución admite cadenas de consulta!

var Url = require(''url''); var Path = require(''path''); var url = ''http://i.imgur.com/Mvv4bx8.jpg?querystring=true''; var result = Path.extname(Url.parse(url).pathname); // ''.jpg''

Im creando una función de carga de archivos en node.js con express 3.

Me gustaría tomar la extensión de archivo de la imagen. entonces puedo renombrar el archivo y luego anexarle la extensión de archivo.

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); });

¿Cómo puedo obtener la extensión de la imagen en node.js?


Creo que el mapeo del encabezado Content-Type en la solicitud también funcionará. Esto funcionará incluso en los casos en que cargue un archivo sin extensión. (cuando filename no tiene una extensión en la solicitud)

Supongamos que está enviando sus datos usando HTTP POST:

POST /upload2 HTTP/1.1 Host: localhost:7098 Connection: keep-alive Content-Length: 1047799 Accept: */* Origin: http://localhost:63342 User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 Content-Type: multipart/form-data; boundary=---- WebKitFormBoundaryPDULZN8DYK3VppPp Referer: http://localhost:63342/Admin/index.html? _ijt=3a6a054pasorvrljf8t8ea0j4h Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.8,az;q=0.6,tr;q=0.4 Request Payload ------WebKitFormBoundaryPDULZN8DYK3VppPp Content-Disposition: form-data; name="image"; filename="blob" Content-Type: image/png ------WebKitFormBoundaryPDULZN8DYK3VppPp--

Aquí el nombre Content-Type header contiene el tipo de mime de los datos. Al asignar este tipo de mimo a una extensión obtendremos la extensión de archivo :).

Restify BodyParser convierte este encabezado en una propiedad con nombre tipo

File { domain: Domain { domain: null, _events: { .... }, _eventsCount: 1, _maxListeners: undefined, members: [ ... ] }, _events: {}, _eventsCount: 0, _maxListeners: undefined, size: 1047621, path: ''/tmp/upload_2a4ac9ef22f7156180d369162ef08cb8'', name: ''blob'', **type: ''image/png''**, hash: null, lastModifiedDate: Wed Jul 20 2016 16:12:21 GMT+0300 (EEST), _writeStream: WriteStream { ... }, writable: true, domain: Domain { ... }, _events: {}, _eventsCount: 0, _maxListeners: undefined, path: ''/tmp/upload_2a4ac9ef22f7156180d369162ef08cb8'', fd: null, flags: ''w'', mode: 438, start: undefined, pos: undefined, bytesWritten: 1047621, closed: true } }

Puede usar este encabezado y hacer la asignación de la extensión (subcadena, etc.) manualmente, pero también hay bibliotecas preparadas para esto. Debajo de dos fueron los mejores resultados cuando hice una búsqueda en Google

  • mímica
  • mime-types

y su uso es simple también:

app.post(''/upload2'', function (req, res) { console.log(mime.extension(req.files.image.type)); }

El fragmento de arriba imprimirá png a la consola.


Creo que puede hacer lo siguiente para obtener la extensión de un nombre de archivo.

var path = require(''path'') path.extname(''index.html'') // returns ''.html''


Es mucho más eficiente utilizar el método substring() lugar de split() y pop()

Echa un vistazo a las diferencias de rendimiento aquí: http://jsperf.com/remove-first-character-from-string

// returns: ''html'' var path = require(''path''); path.extname(''index.html'').substring(1);


Estoy usando esta función para obtener una extensión de archivo, porque no encontré la manera de hacerlo de una manera más fácil (pero creo que sí):

function getExtension(filename) { var ext = path.extname(filename||'''').split(''.''); return ext[ext.length - 1]; }

debe requerir ''ruta'' para usarlo.

otro método que no usa el módulo de ruta:

function getExtension(filename) { var i = filename.lastIndexOf(''.''); return (i < 0) ? '''' : filename.substr(i); }


Una solución simple sin necesidad de requerir que resuelve el problema de extensión de período múltiple:

var filename = ''file.with.long.extension''; var ext = filename.substring(filename.indexOf(''.'')); //ext = ''.with.long.extension''

O si no quieres el punto inicial:

var filename = ''file.with.long.extension''; var ext = filename.substring(filename.indexOf(''.'')+1); //ext = ''with.long.extension''

Asegúrese de probar que el archivo también tiene una extensión.


path.extname hará el truco en la mayoría de los casos. Sin embargo, incluirá todo después del último . , incluida la cadena de consulta y el fragmento hash de una solicitud http:

var path = require(''path'') var extname = path.extname(''index.html?username=asdf'') // extname contains ''.html?username=asdf''

En tales casos, querrás probar algo como esto:

var regex = /[#//?]/g; // regex of illegal extension characters var extname = path.extname(''index.html?username=asdf''); var endOfExt = extname.search(regex); if (endOfExt > -1) { extname = extname.substring(0, endOfExt); } // extname contains ''.html''

Tenga en cuenta que las extensiones con períodos múltiples (como .tar.gz ) no funcionarán en absoluto con path.extname .


// you can send full url here function getExtension(filename) { return filename.split(''.'').pop(); }

Si está utilizando Express, agregue la siguiente línea al configurar el middleware (bodyParser)

app.use(express.bodyParser({ keepExtensions: true}));


var fileName = req.files.upload.name; var arr = fileName.split(''.''); var extension = arr[length-1];