2009-12-30 7 views
16

Wie schränke ich Dateitypen mit dem HTML-Eingabedateityp ein?Wie schränkt man Dateitypen mit HTML-Eingabedateityp ein?

Ich habe diese

<input type="file" id="fileUpload" name="fileUpload" size="23" accept="Calendar/ics"/> 

Ich versuche, die Art nur auf dem iCalendar-Format Typen zu beschränken.

Ich möchte auch auf der Server-Seite überprüfen. Wie mache ich das in ASP.NET MVC?

Antwort

20

Leider können Sie die Dateierweiterung nicht einschränken möchten, können Sie in einem Standard-Dialog Dateibrowser. Sie können jedoch die Erweiterung überprüfen, sobald der Benutzer eine Datei auswählt.

Sie können diesen Ereignishandler hinzufügen.

filebox.Attributes.Add("onchange", "fileSelectedChanged(this);"); 

und diese JavaScript-Funktion

function fileSelectedChanged(obj) { 
    var filePath = obj.value; 

    var ext = filePath.substring(filePath.lastIndexOf('.') + 1).toLowerCase(); 
    if(ext != 'csv') { 
     alert('Only files with the file extension CSV are allowed'); 
    } else { 
     document.getElementById('form1').submit(); 
    } 
} 

Sie auch auf dem Server überprüfen sollten, mit:

filebox.PostedFile.FileName 

und:

filebox.PostedFile.ContentType 
+0

meinen Sie, wenn sie die Datei auf dem Server oder dem hochladen, wenn sie in der „Datei-Dialog wählen Sie“ auf die Datei klicken? – chobo2

+0

Dies wird in JavaScript gemacht, wenn der Benutzer eine neue Datei auswählt (ich habe eine Funktion für Sie eingefügt) –

+0

Denken Sie daran, diese Antwort zu akzeptieren, wenn es geholfen hat, Ihr Problem zu lösen. –

3

text/Kalender ist die richtige Mimetyp

<input type="file" id="fileUpload" name="fileUpload" size="23" accept="text/calendar" /> 
+4

Aktuelle Browser ignorieren im Allgemeinen das ACCEPT-Attribut –

+0

Cool, wusste nicht über das Akzeptieren-Attribut. Es muss immer noch serverseitig überprüft werden, kann aber helfen, die Ressourcennutzung auf dem Server zu reduzieren, da Dateien, die den Server nicht treffen, nicht überprüft werden müssen. –

+0

wie Gabriel sagte, dieses Attribut wird in der Regel von den wichtigsten Browsern inkorporiert, so dass Sie Javascript für "Pre-Validierung" verwenden müssen. – Flatlin3

0

Sie können nicht angeben, welche Art von Dateien der Benutzer auswählen kann. Sie können Javascript verwenden, um zu verhindern, dass der Benutzer das Formular abschickt, aber das ist nicht gut genug. Javascript kann im Browser einfach deaktiviert werden. Sie müssen Logik auf der Server-Seite, die den Content-Typ des Upload auswertet (auch nur die Dateierweiterung Überprüfung ist wirklich nicht gut genug) ...

HttpPostedFile file = Request.Files(0); 

if(file.ContentType != "text/calendar") 
{ 
    //Error 
} 
0

instaed von nehmen sollten Sie contetypes verwenden bemerken Attribut, das gibt es einzelne "t" in contentypes

und in Server-Code-Check wie diese

HttpPostedFileBase file = Request.Files [0];

if (! File.ContentType.startsWith ("text/calendar")) { // Fehler }

Hoffnung dies Ihr Problem Mark meine Antwort, wenn es wird sove wird.

0

Ich persönlich bevorzuge etwas wie Uploadify, was Sie tun können, und bietet auch eine fancy Fortschrittsbalken ... Ich weiß nicht, ob das ein bisschen zu "Schwergewicht" für Sie ist.

Verwandte Themen