36 votes

Comment valider le type de fichier d'un téléchargement de fichier?

J'utilise <input type="file" id="fileUpload" runat="server"> pour télécharger un fichier dans une application ASP.NET. Je voudrais limiter le type de fichier du téléchargement (exemple: limiter aux extensions de fichier .xls ou .xlsx).

La validation JavaScript ou côté serveur est OK (tant que la validation côté serveur a lieu avant le téléchargement des fichiers - il peut y avoir de très gros fichiers téléchargés, donc toute validation doit avoir lieu avant le téléchargement des fichiers réels) .

31voto

Jamie Points 1062

Il semble que les options soient limitées, car vous souhaitez que la vérification ait lieu avant le téléchargement. Je pense que le mieux que vous obtiendrez est d'utiliser javascript pour valider l'extension du fichier. Vous pouvez créer un hachage d'extensions valides, puis rechercher si l'extension du fichier en cours de téléchargement existe dans le hachage.

HTML:

 <input type="file" name="FILENAME"  size="20" onchange="check_extension(this.value,"upload");"/>
<input type="submit" id="upload" name="upload" value="Attach" disabled="disabled" />
 

Javascript:

 var hash = {
  'xls'  : 1,
  'xlsx' : 1,
};

function check_extension(filename,submitId) {
      var re = /\..+$/;
      var ext = filename.match(re);
      var submitEl = document.getElementById(submitId);
      if (hash[ext]) {
        submitEl.disabled = false;
        return true;
      } else {
        alert("Invalid filename, please select another file");
        submitEl.disabled = true;

        return false;
      }
}
 

26voto

shailesh Points 1472

C'est assez simple en utilisant le validateur d'expressions regulare.

 <asp:RegularExpressionValidator
id="RegularExpressionValidator1″
runat="server"
ErrorMessage="Only zip file is allowed!"
ValidationExpression ="^.+(.zip|.ZIP)$"
ControlToValidate="FileUpload1″
> </asp:RegularExpressionValidator>
 

Validation côté client des types de fichiers autorisés à télécharger

6voto

staktrace Points 315

Depuis javascript, vous devriez pouvoir obtenir le nom de fichier dans le gestionnaire onsubmit. Donc, dans votre cas, vous devriez faire quelque chose comme:

 <form onsubmit="if (document.getElementById('fileUpload').value.match(/xls$/) || document.getElementById('fileUpload').value.match(/xlsx$/)) { alert ('Bad file type') ; return false; } else { return true; }">...</form>
 

6voto

kd7 Points 16740

Je suis d'accord avec Chris, la vérification de l'extension n'est pas la validation du type de fichier de toute façon vous le regardez. Telerik est radUpload est probablement votre meilleure option, il fournit une propriété ContentType du fichier en cours de téléchargement, vous pouvez comparer et connu des types mime. Vous devez vérifier:

application/vnd.ms-excel,

application/excel,

application/x-msexcel

et pour la nouvelle 2k7 format:

application/vnd.openxmlformatsofficedocument.spreadsheetml.fiche

Telerik utilisé pour vendre des radUpload comme une composante individuelle, mais maintenant sa enveloppé dans la suite de contrôles, ce qui le rend un peu plus cher, mais de loin la meilleure façon de vérifier, pour le vrai type

4voto

AlexWilson Points 583

Vous pouvez utiliser un validateur d'expressions régulières sur le contrôle de téléchargement:

   <asp:RegularExpressionValidator id="FileUpLoadValidator" runat="server" ErrorMessage="Upload Excel files only." ValidationExpression="^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.xls|.XLS|.xlsx|.XLSX)$" ControlToValidate="fileUpload"> </asp:RegularExpressionValidator>
 

Il existe également l'attribut accept de la balise d'entrée:

 <input type="file" accept="application/msexcel" id="fileUpload" runat="server">
 

mais je n'ai pas eu beaucoup de succès quand j'ai essayé ça (avec FF3 et IE7)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X