2010-11-12 16 views
18

quiero verificar el tipo de archivo cargado. Si el nombre es example.txt, solo quiero obtener la pieza .txt. ¿Cómo puedo lograrlo usando Jquery o Javascript?¿Cómo obtener una extensión de un archivo usando jquery o javascript?

¡Cualquier sugerencia o enlace sería agradecido!

+4

El * nombre * de un archivo puede decirle ** nada ** acerca de lo que realmente contiene. – Pointy

+0

eche un vistazo a este http://stackoverflow.com/questions/1818310/regular-expression-to-remove-a-files-extension – ArK

+0

@Pointy: ¿de qué se trata? No soy capaz de entender ¿Estás hablando de amenazas de seguridad? –

Respuesta

45

Una solución sencilla es .split() y .pop() para conseguir la última cadena de la matriz, así:

var ext = fileName.split('.').pop(); 

Esto conseguirá que acaba de "txt" sin la ., simplemente añada si es necesario. Esto también funciona en decir: My.File.name.has.an extension.txt también. Si no tiene tiene una extensión, devolverá el nombre del archivo, por lo que es posible que desee comprobar esto ... o vaya en una dirección completamente diferente y valide contra un conjunto o extensiones conocidas a través de regex.

+0

esto es lo que estoy buscando gracias !!! –

+0

el script no funcionará correctamente cuando tenga parámetros de cadena de consulta, p. '/example/image.jpg? a = b & b = 2', para manejarlo agregué una división más' file.split ("?") [0] .split ('.'). pop() '(nota: muchas veces los sistemas usaban query-string para prevenir la caché cuando era necesario) –

2
var text = 'example.txt', 
    ext = text.split('.')[1]; 
+0

Es posible que desee hacer esa sintaxis válida, como mínimo. * Editar *: Ahí tienes. –

+0

Jaja lo siento, para acelerar en el teclado – tbleckert

1

Dividir todo el nombre de archivo con. como el delimitador. La división almacenará los elementos divididos en una matriz. Tome el último elemento de la matriz.

8

Uso lastIndexOf() y substr():

function getFileExtension(name) 
{ 
    int found = name.lastIndexOf('.') + 1; 
    return (found > 0 ? name.substr(found) : ""); 
} 

Tenga en cuenta que esta aplicación devuelve una cadena vacía si el nombre de archivo no contiene ningún carácter de punto (es decir, no tiene extensión). Las implementaciones basadas en split() a veces devuelven el nombre de archivo completo en ese caso.

1
if((document.form1.upload.value.lastIndexOf(".jpg")==-1) { 
    alert("Please upload only .jpg extention file"); 
    return false; 
} 

lastIndexOf devolverá el índice de la última aparición del argumento de búsqueda especificado. Si no lo encuentra, -1 devolverá

7

Si necesita validar múltiples extensiones:

var filename = "picture.jpg"; 
var valid_extensions = /(\.jpg|\.jpeg|\.gif)$/i; 
if(valid_extensions.test(filename)) 
{ 
    alert('OK'); 
} 
else 
{ 
    alert('Invalid File'); 
} 

Esto elimina la necesidad de analizar la cadena si desea comprobar la extensión, por ejemplo, antes de subir un archivo.

+1

'foojpg' coincidiría. Los períodos en su expresión regular deben ser escapados. –

+0

-1: dirija el comentario y corrija la respuesta. – ANeves

0

La respuesta de Frédéric funcionó bien para mí, sin embargo, la función sigue creando errores en la consola de Chrome con el "identificador inesperado". El "int" era un problema y esta modificación funcionó.

function getFileExtension(name){ 
    var found = name.lastIndexOf('.') + 1; 
    return (parseInt(found) > 0 ? name.substr(found) : ""); 
} 
Cuestiones relacionadas