2011-12-13 18 views
23

Ho aggiunto un file al mio sito Web asp.net. Tuttavia, voglio limitare i tipi di file che l'utente può selezionare. Ad esempio, ho solo l'utente di selezionare i file mp3. Come posso aggiungere un filtro al caricamento del file in modo che mostri solo i file mp3 nella cartella selezionata?ASP.NET - Limita il numero di file disponibili per il caricamento del file

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

È possibile fare riferimento a postare http://stackoverflow.com/questions/71944/how-do-i-validate-the-file-type-of-a-file-upload o http://stackoverflow.com/questions/4234589/validation-of-file-extension-before -uploading-file Codifica felice !! – Ravia

risposta

4

Non ci sono opzioni per il file di default uploader, ma si possono utilizzare strumenti come Uploadify per adempiere a tale obiettivo. Tuttavia, è basato su flash se questo è un problema. Puoi provarlo sul loro limited file types demo.

Se non si desidera utilizzare il flash, sarebbe più semplice effettuare la convalida da soli tramite javascript o sul lato server e informare l'utente se il tipo di file non è valido.

file-input-accept-attribute-is-it-useful è un'altra domanda simile che può avere alcune informazioni utili.

+3

Mi piacerebbe sapere perché sono stato downvoted. Se fosse a causa dell'opzione flash, solo perché non ti piace non significa che non è un'opzione valida per gli altri. Sto solo dando l'askee, più opzioni tra cui scegliere. –

+0

+1 per l'attributo 'accept'. – CedX

5

Come detto in precedenza, non è possibile, fuori dalla scatola.

La soluzione più semplice che ho trovato: uso un RegularExpressionValidator per controllare l'estensione del file. Non c'è bisogno di JavaScript o librerie esterne. Naturalmente, controlla solo l'estensione, non il contenuto del file (è necessario utilizzare il codice lato server e ispezionare i byte), e non cambia nulla alla lista dei file visualizzato nel browser cartella.

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

Utilizzo di RegularExpressionValidator può aiutare. Nessun codice server è necessario per il controllo dell'estensione del file. Date un'occhiata a questo codice

<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> 

Ricordate che tutto ciò che dovete fare è ora aggiungere un controllo fileupload con l'id FileUpload1. Fatto. È possibile premere F5 e vedere l'effetto

+0

+1, ottima soluzione. Mi piacerebbe solo aggiungere http://msdn.microsoft.com/en-us/library/ms972966.aspx nel caso in cui qualcuno voglia utilizzare un'altra espressione regolare – RdPC

+0

Se ho capito bene, questo non limita i tipi disponibili dal selettore di file, impedisce solo il caricamento quando è stato selezionato un file non valido. Buona idea però! – Ekus

+0

@Ekus Esattamente, questo è il caso – Mubarek

4
<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> 
0

Questo è probabilmente un argomento molto vecchio, se qualcuno ha altro a questa domanda ho trovato che questo ha lavorato per me

perché asp: FileUpload si trasforma in un tag html sul lato client, logicamente rende la possibilità di aggiungere tag html.

ha funzionato per me, ora è possibile selezionare solo quei tipes di file e non hanno bisogno delle espressioni regolari

17

Utilizzare i accettano attributo direttamente nel tag (in realtà non è supportato dal controllo, ma la volontà essere consegnato al client in ogni caso)

Mentre si potrebbe estensioni di file di lista, ad esempio: ".xls, .xlsx", questo NON è consigliato e alcuni browser vengono confusi da esso.

è meglio utilizzo tipi MIME (browser li mappare le estensioni appropriate per voi):

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

Usa elenco separato da virgole, se necessario, ad esempio:

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

Browser supportati e ulteriori informazioni: http://www.w3schools.com/tags/att_input_accept.asp

Tipi MIME comuni di seguito (istantanea di 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 
+0

Ancora "Tutti i file" è presente nell'elenco a discesa. C'è un modo per rimuoverlo? – Biswajeet

+1

@Biswajeet Penso che non ci sia modo di impedire "tutti i file" o impedire all'utente di digitare \ *. \ * Come nome file e mostrare comunque tutti i file, almeno nei comuni browser desktop. Ma vedi l'altra risposta che aggiunge la convalida al campo dopo che il file è stato selezionato - http://stackoverflow.com/a/8492937/1754743 – Ekus

+0

ha fatto il trucco per me ... grazie Ekus –

1

Ho un'applicazione simile che viene utilizzata per caricare file PDF. Mentre sarebbe bello se il controllo Upload avesse un filtro di tipo file fuori dalla scatola, ho scoperto che non avrebbe realmente risolto il problema di limitare il tipo di file da caricare.

Ad esempio, se un utente dovesse semplicemente rinominare un documento di Word da "myfile.docx" a "myfile.pdf", il sistema supponeva che fosse un file valido, anche se la codifica del file effettiva non è valida; questo potrebbe causare problemi in altre parti dell'applicazione.

Per risolvere il problema, è possibile prelevare l'array di byte dal controllo e analizzarlo come stringa. Quindi applica un filtro. Ecco il codice che ho:

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

Naturalmente avrete bisogno di sapere quali modelli sono validi per il tipo di file, e consiglia di utilizzare una regex invece del metodo della stringa di supporto .Net, ma l'idea generale è in realtà controllare il contenuto del file reale e non fare affidamento sull'estensione del file per la convalida.

Ryan A.

1

Nessun problema. Ecco qui!

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

Utilizzare il seguente codice codice js per selezionare solo il tipo di file desiderato che si desidera selezionare. Nell'esempio riportato di seguito voglio selezionare solo file zip, su Sfoglia mostra solo il nome del file zip estensione

(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" /> 
 
     
 
     
 
     
 
    

Problemi correlati