2010-03-24 16 views

Respuesta

9

esta es la respuesta desde el otro foro

Creo que s fácil darse cuenta de que si se utiliza C# (o VB, neto) y el control .NET fileupload. usted puede definir tipos de archivos en la lista de arrays "allowedExtensions".

string upload_Image(FileUpload fileupload, string ImageSavedPath) 
{ 
    FileUpload fu = fileupload; 
    string imagepath = ""; 
    if (fileupload.HasFile) 
    { 
     string filepath = Server.MapPath(ImageSavedPath); 
     String fileExtension = System.IO.Path.GetExtension(fu.FileName).ToLower(); 
     String[] allowedExtensions = { ".gif", ".png", ".jpeg", ".jpg" }; 
     for (int i = 0; i < allowedExtensions.Length; i++) 
     { 
      if (fileExtension == allowedExtensions[i]) 
      { 
       try 
       { 
        string s_newfilename = DateTime.Now.Year.ToString() + 
         DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + 
         DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() +       DateTime.Now.Second.ToString() + fileExtension; 
         fu.PostedFile.SaveAs(filepath + s_newfilename); 

        imagepath = ImageSavedPath + s_newfilename; 
       } 
       catch (Exception ex) 
       { 
        Response.Write("File could not be uploaded."); 
       } 

      } 

     } 

    } 
    return imagepath; 
} 
+1

siento decir que es una código patético arriba. no eficiente. s_newfilename = DateTime.Now.ToString(); :) – LojiSmith

+1

no recorra las extensiones aceptables, simplemente si (allowedExtensions.contains (extension)) está bien – LojiSmith

+2

@LojiSmith ¿Qué cree exactamente que tiene la función contains? Pasa por la iteración. no hay nada de malo con el código anterior, excepto por el hecho de que no están saliendo del circuito una vez que encuentran una coincidencia ... – StephenKelzer

1

creo que no es posible con el control <input type="file".

He oído hablar de SWFUploader que permite definir extensiones para cargar archivos, pero este es un componente basado en flash.

E incluso si usa SWFUploader, nada le impedirá escribir *.* y seleccionar cualquier archivo para cargar.

0

Puede usar C1Upload de ComponentOne para hacer esto. Tiene soporte para el tipo de archivo y la validación de tamaño. Tenga en cuenta que también querrá validar en el servidor, ya que las extensiones de archivo pueden cambiarse fácilmente para que no coincidan con su tipo real. Este es un estándar en cualquier práctica de validación: valide en la capa UI, luego valide en la capa BL y valide preferiblemente también en DL. Aquí hay una demostración del ASP.NET AJAX upload control con validación incorporada.

Otra cosa fresca sobre este control es que es soporta múltiples archivos de carga yprogramas de cargar el progreso!

2

que se refieren a publicar # ASP.NET - Limit file upload available file types

Usando RegularExpressionValidator puede resolver el problema fácilmente. Ya no es necesario ningún código de servidor para verificar la extensión. El ejemplar & pega este código

<asp:RegularExpressionValidator ID="uplValidator" runat="server" 

    ControlToValidate="FileUpload1" ErrorMessage=".mp3, .mp4 & wma formats are allowed" 

ValidationExpression="(.+\.([Mm][Pp][3])|.+\.([Mm][Pp][4])|.+\.([Ww][Mm][Aa]))"> 

</asp:RegularExpressionValidator> 
7

funciona perfectamente!

<asp:FileUpload ID="FileUpload1" runat="server" accept=".xls, .xlsx"/> 
+0

¡Guau, eso fue fácil! – Steve

0

cuando se utiliza angular carga de archivos, así que ca pasa filtros para uploder

.html al archivo Archivo

<input type="file" nv-file-select uploader="uploaderImages" /> 

Js:

$scope.uploaderImages.filters.push({ 
    name: 'imageFilter', 
    fn: function (item/*{File|FileLikeObject}*/, options) { 
     var type = '|' + item.type.slice(item.type.lastIndexOf('/') + 1) + '|'; 
     return '|jpg|png|jpeg|bmp|gif|'.indexOf(type) !== -1; 
    } 
}); 
Cuestiones relacionadas