web-dev-qa-db-fra.com

ASP.NET - Limiter le nombre de types de fichiers disponibles pour le téléchargement de fichiers

J'ai ajouté un fichier à télécharger sur mon site asp.net. Cependant, je veux limiter les types de fichiers que l'utilisateur peut sélectionner. Par exemple, je seul l'utilisateur pour sélectionner des fichiers mp3. Comment puis-je ajouter un filtre au téléchargement de fichier pour qu'il affiche uniquement les fichiers MP3 du dossier sélectionné?

 <asp:FileUpload ID="FileUpload1" runat="server" />
 <asp:Button ID="btnAudUpload" Text="Upload" CssClass="btncssUpload" OnClick="btnAudUpload_Click" runat="server" />
23
Mark

Utiliser RegularExpressionValidator peut vous aider. Aucun code côté serveur n'est nécessaire pour la vérification de l'extension de fichier. Découvrez 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>

N'oubliez pas que tout ce que vous avez à faire est maintenant d'ajouter un contrôle fileupload avec l'id FileUpload1. Terminé. Vous pouvez appuyer sur F5 et voir l'effet

33
Mubarek

Utilisez l'attribut accept directement dans la balise (ce n'est pas vraiment pris en charge par le contrôle, mais sera remis au client de toute façon)

Bien que vous pourriez lister les extensions de fichier, par exemple: ".xls, .xlsx", cela n’est PAS recommandé et cela compliquerait la confusion de certains navigateurs. 

Il est préférable de utiliser les types MIME (le navigateur les mappera aux extensions appropriées pour vous):

 Upload MP3: <asp:FileUpload runat="server" accept=""audio/mpeg" />

Utilisez une liste séparée par des virgules si nécessaire, par exemple:

 Upload Excel files: <asp:FileUpload runat="server" 
                 accept="application/vnd.ms-Excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />

Navigateurs pris en charge et plus d’informations: http://www.w3schools.com/tags/att_input_accept.asp

Types MIME courants ci-dessous (instantané de http://www.sitepoint.com/web-foundations/mime-types-summary-list/ )

.au audio/basic
.avi video/msvideo, video/avi, video/x-msvideo
.bmp image/bmp
.bz2 application/x-bzip2
.css text/css
.dtd application/xml-dtd
.doc application/msword
.docx application/vnd.openxmlformats-officedocument.wordprocessingml.document
.dotx application/vnd.openxmlformats-officedocument.wordprocessingml.template
.es application/ecmascript
.exe application/octet-stream
.gif image/gif
.gz application/x-gzip
.hqx application/mac-binhex40
.html text/html
.jar application/Java-archive
.jpg image/jpeg
.js application/x-javascript
.midi audio/x-midi
.mp3 audio/mpeg
.mpeg video/mpeg
.ogg audio/vorbis, application/ogg
.pdf application/pdf
.pl application/x-Perl
.png image/png
.potx application/vnd.openxmlformats-officedocument.presentationml.template
.ppsx application/vnd.openxmlformats-officedocument.presentationml.slideshow
.ppt application/vnd.ms-powerpointtd>
.pptx application/vnd.openxmlformats-officedocument.presentationml.presentation
.ps application/postscript
.qt video/quicktime
.ra audio/x-pn-realaudio, audio/vnd.rn-realaudio
.ram audio/x-pn-realaudio, audio/vnd.rn-realaudio
.rdf application/rdf, application/rdf+xml
.rtf application/rtf
.sgml text/sgml
.sit application/x-stuffit
.sldx application/vnd.openxmlformats-officedocument.presentationml.slide
.svg image/svg+xml
.swf application/x-shockwave-flash
.tar.gz application/x-tar
.tgz application/x-tar
.tiff image/tiff
.tsv text/tab-separated-values
.txt text/plain
.wav audio/wav, audio/x-wav
.xlam application/vnd.ms-Excel.addin.macroEnabled.12
.xls application/vnd.ms-Excel
.xlsb application/vnd.ms-Excel.sheet.binary.macroEnabled.12
.xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xltx application/vnd.openxmlformats-officedocument.spreadsheetml.template
.xml application/xml
.Zip application/Zip, application/x-compressed-Zip
21
Ekus

Comme indiqué ci-dessus, il est impossible de sortir de la boîte.

La solution la plus simple que j'ai trouvée: utilisez un RegularExpressionValidator pour vérifier l'extension du fichier. Pas besoin de JavaScript ou de bibliothèques externes. Bien entendu, il ne vérifie que l’extension, pas le contenu du fichier (vous devez utiliser un code côté serveur et inspecter les octets), et ne modifie en rien la liste de fichiers affichée dans l’explorateur de dossiers.

<asp:RegularExpressionValidator ControlToValidate="FileUpload1" ValidationExpression="^.*\.(mp3|MP3)$" runat="server" />
5
CedX

Il n'y a pas d'option pour le téléchargement de fichier par défaut, mais vous pouvez utiliser des outils tels que Uploadify pour atteindre cet objectif. Cependant, il est basé sur le flash si cela pose un problème. Vous pouvez l'essayer sur leur démo de types de fichiers limited .

Si vous ne souhaitez pas utiliser flash, il serait plus simple de procéder à la validation vous-même via JavaScript ou côté serveur et d'informer l'utilisateur si le type du fichier n'est pas valide.

file-input-accept-attribut-is-it-utile est une autre question similaire qui peut contenir des informations utiles.

4
Josh Mein
<asp:RegularExpressionValidator ID="rexp" runat="server" ControlToValidate="fupProduct"
     ErrorMessage="Only .gif, .jpg, .png, .tiff and .jpeg"
     ValidationExpression="(.*\.([Gg][Ii][Ff])|.*\.([Jj][Pp][Gg])|.*\.([Bb][Mm][Pp])|.*\.([pP][nN][gG])|.*\.([tT][iI][iI][fF])$)"></asp:RegularExpressionValidator>
4
saau

Ce n'est pas possible avec le contrôle FileUpload dans ASP.NET, mais le lien suivant peut aider:

http://forums.asp.net/p/1136820/1817938.aspx

3
Kev Ritchie

J'ai une application similaire utilisée pour télécharger des fichiers PDF. Il serait bien que le contrôle de téléchargement ait un filtre de type de fichier prêt à l'emploi, mais j'ai découvert que cela ne résoudrait pas vraiment le problème de la limitation du type de fichier à télécharger.

Par exemple, si un utilisateur devait simplement renommer un document Word de "myfile.docx" en "myfile.pdf", le système supposerait qu'il s'agit d'un fichier valide, même si le codage de fichier réel est invalide; cela poserait des problèmes dans d'autres parties de l'application.

Pour résoudre le problème, vous pouvez extraire le tableau d'octets du contrôle et l'analyser en tant que chaîne. Puis appliquez un filtre. Voici le code que j'ai:

private static void CheckForValidFileType(byte[] data)
{
    var text = ASCIIEncoding.ASCII.GetString(data);
    if (!text.StartsWith("%PDF"))
        throw new Exception("Invalid file type selected.");
}

Bien sûr, vous aurez besoin de savoir quels modèles sont valides pour votre type de fichier et voudrez peut-être utiliser un RegEx au lieu de la méthode d'assistance à la chaîne .Net, mais l'idée générale est de vérifier le contenu du fichier et de ne pas compter sur le fichier extension pour validation.

Ryan A.

1
Ryan Anderson

Il n'y a pas de problème. C'est ici!

<asp:FileUpload ID="FileUpload1" runat="server" accept=".mp3"/>
1
Alex

C'est probablement un très vieux sujet, cependant si quelqu'un d'autre a cette question J'ai trouvé que cela fonctionnait pour moi

dans la mesure où asp: FileUpload est converti en une balise html côté client, il est donc logique que vous puissiez ajouter des balises html.

Cela a fonctionné pour moi, maintenant vous pouvez uniquement sélectionner ces astuces sur les fichiers et vous n'avez pas besoin des expressions régulières

0
Donald Jansen

Utilisez le code de code js suivant pour ne sélectionner que le type de fichier requis que nous voulons sélectionner . DANS l'exemple ci-dessous, je souhaite uniquement sélectionner un fichier Zip. Lors de l'exploration, il affiche uniquement le nom du fichier d'extension .zip.

  (function ($) {
            $.fn.acceptFileType = function (types) {
                if (types == undefined) {
                    return true;
                } else {
                    types = types.split(",")
                }
                this.each(function () {
                    $(this).bind("change", function () {
                        if (!$.inArray($(this).val().replace(/([\d\w.]+)(\.[a-z0-9]+)/i, '\2'), types)) {
                            $(this).val('');
                            return false;
                        }
                        return true;
                    });
                });
            };
        })(jQuery);
        $(":file").acceptFileType(".Zip");
        
        
        
         <input type="file" id="txtFileUploadGrid" runat="server" accept=".Zip,application/octet-stream,application/Zip,application/x-Zip,application/x-Zip-compressed" />
        
        
        
        

0
Mukul