2009-12-30 17 views

risposta

20

Sfortunatamente, non è possibile limitare l'estensione del file come è possibile in una finestra di dialogo standard per browser di file. Tuttavia, è possibile controllare l'estensione una volta che l'utente ha selezionato un file.

È possibile aggiungere questo gestore di eventi.

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

e questa funzione JavaScript

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(); 
    } 
} 

Si dovrebbe anche controllare sul server, utilizzando:

filebox.PostedFile.FileName 

e:

filebox.PostedFile.ContentType 
+0

intendi quando caricano il file sul server o quando fanno clic sul file nella finestra di dialogo "scegli il file"? – chobo2

+0

Questo viene fatto in JavaScript quando l'utente seleziona un nuovo file (ho incluso una funzione per te) –

+0

Ricorda di accettare questa risposta se ha aiutato a risolvere il tuo problema. –

3

text/calendario è il right mime type

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

I browser correnti generalmente ignorano l'attributo ACCEPT –

+0

Cool, non sapeva dell'attributo accept. Ha ancora bisogno di essere convalidato lato server di c, ma può aiutare a ridurre l'utilizzo delle risorse sul server poiché i file che non colpiscono il server non devono essere controllati. –

+0

come ha detto Gabriel questo attributo è generalmente ingerito dai principali browser, quindi devi usare javascript per "pre-validazione". – Flatlin3

0

Non è possibile specificare il tipo di file che l'utente può scegliere. È possibile utilizzare Javascript per impedire all'utente di inviare il modulo, ma ciò non è sufficiente. Javascript può essere facilmente disabilitato nel browser. È necessario logica sul lato server che valuta il tipo di contenuto del caricamento (anche solo controllando l'estensione del file è abbastanza davvero non va bene) ...

HttpPostedFile file = Request.Files(0); 

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

instaed di accettare si dovrebbe usare contetypes attributo notare che c'è singolo "t" in contentypes

e sotto controllo codice del server come questo

HttpPostedFileBase file = Request.Files [0];

if (! File.ContentType.startsWith ("text/calendario")) { // errore }

speranza questo sove il problema Mark la mia risposta, se lo farà.

0

Personalmente preferisco qualcosa come Uploadify che ti permette di fare questo, e fornisce anche una barra di progresso di fantasia ... Non so se questo è un po 'troppo "pesante" per te però.

Problemi correlati