Home / Programmazione / C# - Asp.NET / Upload in Asp.NET e C#
Mattepuffo

Upload in Asp.NET e C#

Upload in Asp.NET e C#

Oggi vi spiego come impostare un upload in Asp.NET e C# con un controllo sull'estensione e la dimensione.

Prima di tutto nella pagina aggiungiamo il controllo che ci serve:

<asp:FileUpload ID="FileUpload1" runat="server" />

<asp:Button ID="Submit" runat="server" Text="Submit" OnClick="insertFile" />

Si tratta di due controlli:

  • un per scegliere quale file caricare
  • un pulsante che richiama il metodo insertFile scritto nel code-behind

Fatto ciò andiamo a modificare il file Web.config per impostare la dimensione massima e le estensioni:

<system.web>
<httpRuntime  maxRequestLength="10240000" executionTimeout="360"/>
</system.web>

<appSettings>
<add key="audioExt" value="mp3 ogg flac"/>
</appSettings>

httpRuntime determina le modalità di elaborazione di una richiesta.

maxRequestLength determina la dimensione massima espressa in KB.

executionTimeout è il numero massimo di secondi.

Ovviamente cercate di impostare dei valori che corrispondano: è inutile accettare dimensioni grando e impostare un timeput troppo piccolo.

Inolre considerate che questo valore vale per tutti gli eventuali upload: se volete impostare dimendioni diverse (ad esempio per immagini, video e audio) dovete fare un controllo a mano.

appSettings invece contiene le impostazioni personali.

Abbiamo aggiunto una key impostando come valore le nostre estensioni (separate da spazio, ma potete mettere anche un segno, stando attenti ai caratteri speciali).

Possiamo avere anche più key; ad esempio un'altra per le estensioni dei file video.

 

Vediamo adesso il metodo per eseguire l'upload.

protected void insertFile(object sender, EventArgs e)
{
string filePath = "C:\\Documents and Settings\\Administrator\\Desktop\\Upload\\";
string ext = System.Configuration.ConfigurationManager.AppSettings["videoExt"];
string[] arr = ext.Split(' ');
string extUpload;
if (FileUpload1.HasFile)
{
filePath += FileUpload1.FileName;
extUpload = name.Substring(name.LastIndexOf('.') + 1);
if (File.Exists(filePath))
{
lblMessage.Text = "Il file già esiste";
}
else
{
foreach (string estensioni in arr)
{
if (extUpload == estensioni)
{
try
{
FileUpload1.SaveAs(filePath);
lblMessage.Text = "File caricato";
break;
}
catch (Exception ex)
{
lblMessage.Text = ex.Message;
}
}
else
{
lblMessage.Text = "Estensione non supportata";
}
}
}
}
else
{
lblMessage.Text = "File non caricato";
}
}

lblMessage è una semplice Label dove stampo i messaggi.

filePath contiene il percorso di salvataggio.

ext interroga appSettings alla ricerca della key che vogliamo noi (in questo caso audioExt passato come stringa).

Usiamo il metodo Split per separare la string ext in prossimità degli spazi (perchè ho separato le estensioni con gli spazi; sennò dovevate mettere il carattere vostro).

Split ritorna un array in prossimità del punto di separazione; questo array lo salviamo dentro arr (un array di stringhe).

extUpload per ora è vuoto.

Dopo di che cominciamo con l'upload.

Prima di tutto viene controllato se è stato scelto un file da caricare (FileUpload1.HasFile).

Se è così a filePath aggiungiamo FileUpload1.FileName (cioè il nome del file).

A questo punto entra in gioco extUpload, che ci serve per salvare solo l'estenione del file; cioè se il file è nome.mp3 noi slaviamo solo mp3.

Questo ci serve per fare il controllo sull'estensione.

Tutto ciò avviene grazie a Substring e LastIndexOF.

Il secondo cerca l'ultima occorrenza di ciò che gli viene passato (in questo caso il punto).

Il primo invece serve per recuperare solo una parte di una stringa (in questo caso dal punto, escluso, in poi).

Poi c'è un controllo sull'esistenza del file ((File.Exists(filePath)); se non esiste l'istruzione itera con un foreach in tutto l'array di estensioni.

Se l'estensione strapolata dal file (extUpload) è diverso da tutti i valori dell'array l'istruzione si blocca.

Sennò prosegue col salvataggio del file (FileUpload1.SaveAs(filePath);) e blocca l'iterazione con break (sennò continuerebbe a iterare e darebbe errore per le altre estensioni non trovate, caricando comunque il file).

A questo punto fate un pò di prove per vedere se tutto funziona.

A me pare di si!!