2011-12-13 14 views
23

Dodałem plik do mojej strony asp.net. Jednak chcę ograniczyć typy plików, które użytkownik może wybrać. Na przykład tylko ja wybieram pliki mp3. Jak mogę dodać filtr do przesyłania plików, aby wyświetlał tylko pliki mp3 z wybranego folderu?ASP.NET - Ograniczenie przesyłania plików dostępne typy plików

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

Można odwołać się odpowiedzieć http://stackoverflow.com/questions/71944/how-do-i-validate-file-of-a-file-upload lub http://stackoverflow.com/questions/4234589/validation-of-file-extension-before -uploading-file Szczęśliwe kodowanie !! – Ravia

Odpowiedz

4

Brak możliwości przesyłającej domyślnego pliku, ale można użyć narzędzi, takich jak Uploadify spełnić ten cel. Jednak jest to oparte na pamięci flash, jeśli jest to problem. Możesz wypróbować na ich limited file types demo.

Jeśli nie chcesz używać lampy błyskowej, najłatwiej byłoby samodzielnie wykonać sprawdzanie przez javascript lub po stronie serwera i poinformować użytkownika, czy typ pliku jest nieprawidłowy.

file-input-accept-attribute-is-it-useful to kolejne podobne pytanie, które może zawierać przydatne informacje.

+3

Chciałbym wiedzieć, dlaczego zostałem odrzucony. Jeśli to ze względu na opcję flash, to dlatego, że ci się to nie podoba, nie oznacza, że ​​nie jest ważną opcją dla innych. Właśnie podaję prośbę, więcej opcji do wyboru. –

+0

+1 dla atrybutu "accept". – CedX

5

Jak wspomniano powyżej, nie jest możliwe po wyjęciu z pudełka.

Prostsze rozwiązanie, które znalazłem: użyj opcji RegularExpressionValidator, aby sprawdzić rozszerzenie pliku. Nie wymaga JavaScript ani zewnętrznych bibliotek. Oczywiście sprawdza tylko rozszerzenie, a nie zawartość pliku (należy użyć kodu po stronie serwera i sprawdzić bajty) i nie zmienia niczego w liście plików wyświetlanej w przeglądarce folderów.

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

Korzystanie z funkcji RegularExpressionValidator może być pomocne. Do sprawdzenia rozszerzenia pliku nie jest wymagany kod serwera. Sprawdź ten kod:

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

Pamiętaj, że wszystko co musisz teraz zrobić, to dodać kontrolkę fileupload z identyfikatorem FileUpload1. Gotowe. Można nacisnąć klawisz F5 i zobaczyć efekt

+0

+1, świetne rozwiązanie. Chciałbym dodać http://msdn.microsoft.com/en-us/library/ms972966.aspx na wypadek, gdyby ktoś chciał użyć innego wyrażenia regularnego. – RdPC

+0

Jeśli dobrze rozumiem, nie ogranicza to dostępnych typów z selektor plików, po prostu zapobiega wysyłaniu, gdy wybrany został nieprawidłowy plik. Dobry pomysł! – Ekus

+0

@Ekus Dokładnie tak jest w tym przypadku. – 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

Prawdopodobnie jest to bardzo stary temat, ale jeśli ktoś ma na to pytanie Okazało się, że ten pracował dla mnie

ponieważ asp: FileUpload przekształca się w znacznik html po stronie klienta, logicznie sprawia, że ​​możesz dodawać tagi html.

on pracował dla mnie, teraz można wybrać tylko te TIPES plików i nie wymagają wyrażenia regularne

17

Użyj zaakceptować atrybutów bezpośrednio w znaczniku (to naprawdę nie jest obsługiwany przez sterownik, ale będzie i tak być dostarczone do klienta)

Podczas gdy może lista rozszerzeń plików, np .: ".xls, .xlsx", nie jest to zalecane, a niektóre przeglądarki się mylić przez to.

Lepiej użytku typy MIME (przeglądarka będzie mapować je do odpowiednich rozszerzeń dla ciebie):

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

Korzystanie z listy oddzielonych przecinkami razie potrzeby, np:

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

obsługiwanych przeglądarek i więcej informacji: http://www.w3schools.com/tags/att_input_accept.asp

Typowe typy MIME poniżej (migawka 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

W menu rozwijanym znajduje się nadal "Wszystkie pliki". Czy istnieje sposób, aby to usunąć? – Biswajeet

+1

@Biswajeet Myślę, że nie ma sposobu, aby zapobiec "wszystkim plikom" lub uniemożliwić użytkownikowi wpisywanie \ *. \ * Jako nazwy pliku i pokazywanie wszystkich plików mimo to, przynajmniej w popularnych przeglądarkach komputerowych. Ale zobacz inną odpowiedź, która dodaje sprawdzanie poprawności do pola po wybraniu pliku - http://stackoverflow.com/a/8492937/1754743 – Ekus

+0

załatwił sprawę dla mnie ... dzięki Ekus –

1

Mam podobną aplikację, która jest używana do przesyłania plików PDF. Chociaż byłoby świetnie, gdyby Kontrola przesyłania miała filtr typu pliku po wyjęciu z pudełka, okazało się, że tak naprawdę nie rozwiąże problemu ograniczenia typu pliku do przesłania.

Na przykład, jeśli użytkownik po prostu zmienił nazwę dokumentu Worda z "myfile.docx" na "myfile.pdf", system założyłby, że był to poprawny plik, nawet jeśli rzeczywiste kodowanie pliku jest nieprawidłowe; spowodowałoby to problemy w innych częściach aplikacji.

Aby faktycznie rozwiązać problem, możesz pobrać tablicę bajtów ze sterującej i przeanalizować ją jako ciąg znaków. Następnie zastosuj filtr. Oto kod mam:

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

Oczywiście trzeba będzie wiedzieć, jakie wzory są ważne dla danego typu plików, a może chcesz użyć regex zamiast metody pomocnika ciąg .NET, ale ogólna idea to faktycznie sprawdzić rzeczywistą zawartość pliku i nie polegać na rozszerzeniu pliku do sprawdzania poprawności.

Ryan A.

1

Nie ma problemu. Oto jest!

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

Użyj następującego kodu js, aby wybrać tylko żądany typ pliku, który chcemy wybrać. W poniższym przykładzie chcę wybrać tylko plik zip, Browse to pokazuje tylko nazwę pliku zip rozszerzenie pliku

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

Powiązane problemy