Estoy creando una función de carga de archivos en node.js con express 3.
Me gustaría tomar la extensión del archivo de la imagen. para poder cambiar el nombre del archivo y luego agregarle la extensión del 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?
javascript
node.js
file-type
georgesamper
fuente
fuente
Respuestas:
Creo que puede hacer lo siguiente para obtener la extensión de un nombre de archivo.
fuente
app.css.gz
solo volverán.gz
y no.css.gz
, lo que puede o no ser lo que desea.filename.split('.').pop();
.
.'filename.css.gz'.split('.').slice(1).join('.')
obtener todas las extensionesjone.lastTest.654654556.tar.gz
aquí, la extensión que se espera es tar.gz, pero si aplicas cualquier función que dé el primer punto, no funcionará como puedes verActualizar
Desde la respuesta original, extname () se ha agregado al
path
módulo, vea la respuesta de SnowfishRespuesta original:
Estoy usando esta función para obtener una extensión de archivo, porque no encontré una manera de hacerlo de una manera más fácil (pero creo que la hay):
debes requerir 'ruta' para usarlo.
Otro método que no utiliza el módulo de ruta:
fuente
var is = fs.createReadStream(req.files.upload.path), fileType = is.path.split(/[. ]+/).pop();
Si está utilizando express, agregue la siguiente línea cuando configure middleware (bodyParser)
fuente
Es mucho más eficiente usar el
substr()
método en lugar desplit()
&pop()
Eche un vistazo a las diferencias de rendimiento aquí: http://jsperf.com/remove-first-character-from-string
Actualización de agosto de 2019 Como señaló @xentek en los comentarios;
substr()
ahora se considera una función heredada ( documentación MDN ). Puedes usarsubstring()
en su lugar. La diferencia entresubstr()
ysubstring()
es que el segundo argumento desubstr()
es la longitud máxima para devolver, mientras que el segundo argumento desubstring()
es el índice para detenerse (sin incluir ese carácter). Además,substr()
acepta posiciones de inicio negativas para utilizarlas como un desplazamiento desde el final de la cadena, mientrassubstring()
que no lo hace.fuente
substr
se considera una función heredada y debe evitarse cuando sea posible. Más información sobre MDN¡Esta solución admite cadenas de consulta!
fuente
Una solución simple sin necesidad de requerir que resuelva el problema de extensión de períodos múltiples:
O si no quieres el punto inicial:
Asegúrese de probar que el archivo también tiene una extensión.
fuente
Creo que mapear el encabezado Content-Type en la solicitud también funcionará. Esto funcionará incluso en los casos en que cargue un archivo sin extensión. (cuando el nombre de archivo no tiene una extensión en la solicitud)
Suponga que está enviando sus datos usando HTTP POST:
Aquí el encabezado nombre Content-Type contiene el tipo mime de los datos. Al asignar este tipo MIME a una extensión obtendrá la extensión del archivo :).
Restify BodyParser convierte este encabezado en una propiedad con tipo de nombre
Puede usar este encabezado y hacer la asignación de extensión (subcadena, etc.) manualmente, pero también hay bibliotecas listas para esto. Debajo de dos estaban los mejores resultados cuando hice una búsqueda en Google
y su uso también es simple:
el fragmento anterior imprimirá png a la consola.
fuente
fuente
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:En tales casos, querrás probar algo como esto:
Tenga en cuenta que las extensiones con varios períodos (como
.tar.gz
) no funcionarán en absoluto conpath.extname
.fuente
La siguiente función divide la cadena y devuelve el nombre y la extensión sin importar cuántos puntos haya en la extensión. Devuelve una cadena vacía para la extensión si no hay ninguna. Los nombres que comienzan con puntos y / o espacios en blanco también funcionan.
fuente
import extname para devolver la extensión al archivo:
donde archivo es el archivo 'nombre' del formulario
fuente
Puede usar path.parse (ruta) , por ejemplo
fuente
Prueba este
fuente