2009-12-30 28 views

Respuesta

20

Lamentablemente, no se puede restringir la extensión de archivo como se puede en un cuadro de diálogo estándar del navegador de archivos. Sin embargo, puede verificar la extensión una vez que el usuario selecciona un archivo.

Puede agregar este controlador de eventos.

filebox.Attributes.Add("onchange", "fileSelectedChanged(this);"); 

y esta función JavaScript

function fileSelectedChanged(obj) { 
    var filePath = obj.value; 

    var ext = filePath.substring(filePath.lastIndexOf('.') + 1).toLowerCase(); 
    if(ext != 'csv') { 
     alert('Only files with the file extension CSV are allowed'); 
    } else { 
     document.getElementById('form1').submit(); 
    } 
} 

También debe comprobar que funciona en el servidor, usando:

filebox.PostedFile.FileName 

y:

filebox.PostedFile.ContentType 
+0

¿quiere decir cuando cargan el archivo al servidor o cuando hacen clic en el archivo en "elegir el diálogo de archivo"? – chobo2

+0

Esto se hace en JavaScript cuando el usuario selecciona un nuevo archivo (incluí una función para usted) –

+0

Recuerde aceptar esta respuesta si le ayudó a resolver su problema. –

3

de texto/calendario es el derecho mimo tipo

<input type="file" id="fileUpload" name="fileUpload" size="23" accept="text/calendar" /> 
+4

Los navegadores actuales generalmente ignoran el atributo ACCEPT –

+0

Cool, no se conocía el atributo de aceptación. Todavía necesita ser validado desde el lado del servidor, pero puede ayudar a reducir el uso de recursos en el servidor ya que no es necesario verificar los archivos que no llegan al servidor. –

+0

como Gabriel dijo que este atributo es generalmente aceptado por los principales navegadores, por lo que debe usar javascript para "prevalidación". – Flatlin3

0

No puede especificar qué tipo de archivos puede elegir el usuario. Puede usar Javascript para evitar que el usuario envíe el formulario, pero eso no es suficiente. Javascript se puede deshabilitar fácilmente dentro del navegador. Es necesario lógica en el lado del servidor que evalúa el tipo de contenido de la carga (incluso sólo el control de la extensión de archivo es lo suficientemente realmente no es bueno) ...

HttpPostedFile file = Request.Files(0); 

if(file.ContentType != "text/calendar") 
{ 
    //Error 
} 
0

instaed de aceptar que puedes usar contetypes atributo de cuenta de que hay solo "t" en contentypes

y en servidor de comprobación código como este

HttpPostedFileBase file = Request.Files [0];

if (! File.ContentType.startsWith ("texto/calendario")) { // Error }

Esperamos que esto sove su problema Marcos mi respuesta si lo hará.

0

Personalmente prefiero algo como Uploadify que le permite hacer esto, y también proporciona una barra de progreso elegante ... No sé si eso es demasiado "pesado" para usted.

Cuestiones relacionadas