2010-03-24 1 views
10

comment filtrer le type de fichier avec le contrôle de téléchargement de fichier dans asp.net & C# .netfiltre le type de fichier avec le contrôle de téléchargement de fichiers

par exemple sur en cliquant sur le bouton de navigation de la commande de téléchargement de fichiers, il devrait Ouvrez la boîte de dialogue Parcourir le fichier avec uniquement les types de fichiers Excel.

comment est-il possible

Répondre

9

c'est la réponse de l'autre forum

Je pense qu'il est facile de se rendre compte si vous utilisez C# (ou VB, net) et .net contrôle fileupload. vous pouvez définir des types de fichiers dans l'arrailiste "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

désolé de dire son un code pathétique ci-dessus. pas efficace. s_newfilename = DateTime.Now.ToString(); :) – LojiSmith

+1

ne pas boucler par les extensions acceptables, juste si (allowedExtensions.contains (extension)) est bien – LojiSmith

+2

@LojiSmith Que penses-tu exactement que la fonction contient fait? Il boucle à travers l'itération. il n'y a rien de mal avec le code ci-dessus, sauf le fait qu'ils ne sortent pas de la boucle une fois qu'ils trouvent une correspondance ... – StephenKelzer

1

Je pense qu'il est impossible avec <input type="file" contrôle.

J'ai entendu parler de SWFUploader qui permet de définir des extensions pour les fichiers à télécharger, mais il s'agit d'un composant basé sur le flash.

Et même si vous utilisez SWFUploader, rien ne vous empêchera de taper *.* et de sélectionner n'importe quel fichier à télécharger.

0

Vous pouvez utiliser C1Upload à partir de ComponentOne pour ce faire. Il prend en charge la validation du type et de la taille de fichier. Gardez à l'esprit que vous souhaiterez également valider sur le serveur car les extensions de fichiers peuvent facilement être modifiées pour ne pas correspondre à leur type réel. C'est un standard dans toute pratique de validation: validez dans la couche UI puis validez à la couche BL et de préférence validez aussi à la DL. Voici une démo du ASP.NET AJAX upload control avec validation intégrée.

Une autre chose cool sur ce contrôle est qu'il prend en charge plusieurs fichiers de téléchargement et montre la progression du téléchargement!

2

Je me réfère à poster # ASP.NET - Limit file upload available file types

L'utilisation RegularExpressionValidator peut résoudre le problème facilement. Aucun code côté serveur n'est nécessaire pour la vérification de l'extension. Copie & coller ce code

<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

Il fonctionne parfaitement!

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

Wow, c'était facile! – Steve

0

lors de l'utilisation angulaire File Upload, de cette façon vous ca passer les filtres à uploder

.html fichier

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

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