Antonio Feliziani
a- a+

FileUpload

Con As.Net 1.1 per Uplodare un file dovevamo utilizzarel'oggetto HTML FileUpload. Questo controllo inserisceun'elemento < input type="file"> nellavostra pagina web per permettere all'utilizzatore finaledi caricare un file nel server. 

Per usare il file, tuttavia, avete dovuto fare una coppiadelle modifiche alla pagina. Per esempio, siete stati tenutiad aggiungere enctype="multipart/form-data"all'elemento <form> della pagina. 

ASP.net 2,0 introduce un nuovo controllo lato server  di"FileUpload" che rende il processo di uploading difile ancora più semplice. Nel dare ad una pagina lapossibilità per uploadare i file, includetesemplicemente il nuovo controllo <asp:FileUpload > edASP.net fà il resto, compreso la aggiuntadell'attributo del enctype all'elemento <form>della pagina.

Dopo che il file viene uppato nel server, potete ancheleggere le proprietà dell'oggetto appena uppato evisualizzarle nel codebehind per delle vostre operazioni osemplicemnte per visualizzarle a monitor.

Di seguito vi mostro un' esempio dell'utilizzo delnuovo controllo di FileUpload. La pagina contiene unsingolo controllo di FileUpload, più un botton e unalabel.

 

Default.aspx.vb

 

PartialClass _Default   Inherits System.Web.UI.PageProtectedSub Button1_Click1(ByVal sender As Object,ByVal e As System.EventArgs) Handles Button1.Click If FileUpload1.HasFile Then     Try    FileUpload1.SaveAs("C:Uploads" & _    FileUpload1.FileName)    Label1.Text = "File name: " & _    FileUpload1.PostedFile.FileName & "<br>" & _    "File Size: " & _    FileUpload1.PostedFile.ContentLength &" kb<br>" & _    "Content type: " & _    FileUpload1.PostedFile.ContentType     Catch ex As Exception    Label1.Text = "ERROR: " & ex.Message.ToString()     End Try ElseLabel1.Text = "You have not specified a file." End If    End SubEndClass

 

 

 

  L’HTMLdella pagina Default.aspx

 

 

<htmlxmlns="http://www.w3.org/1999/xhtml"><headrunat="server">   <title>Untitled Page</title></head><body>   <formid="form1"runat="server">   <div> <asp:FileUploadID="FileUpload1"runat="server"/> <br/> <asp:ButtonID="Button1"runat="server"Text="Carica"/> <br/> <asp:LabelID="Label1"runat="server"Width="238px"> </asp:Label></div>    </form></body></html>

 

Questo è il risultato HTML della pagina aBroswer

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head><title>Untitled Page</title></head><body>    <form name="form1" method="post" action="Default.aspx" id="form1" enctype="multipart/form-data"><div><input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTI3ODM5MzQ0Mg9kFgICAw8WAh4HZW5jdHlwZQUTbXVsdGlwYXJ0L2Zvcm0tZGF0YWRk1mU16UI+piFPTcmin4AMxSUR7IY=" /></div><div>  <input type="file" name="FileUpload1" id="FileUpload1" /><br />  <input type="submit" name="Button1" value="Carica" id="Button1" /><br />  <span id="Label1" style="display:inline-block;width:238px;"></span></div><div><input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgKej/6FDgKM54rGBrECgDP67V+1W5NOfbOjwzAhu2uq" /></div></form></body></html>

 

 

Testando la nostra applicazione con un file Access avremoquesto output nella label

File name: C:Documents andSettingsUtenteDesktopTestContatti.mdb
File Size: 98304 kb
Content type: application/msaccess

Potrestericevere errori quando i vostri utilizzatori finalitenteranno di uppare dei file nel  vostro web server conil controllo di FileUpload della vostraapplicazione. 
Questo potrebbe accadere perché la cartella didestinazione non è scrivibile dall’utente usatoda ASP.net. 

Se ASP.netnon ha il permesso di scrivere nella cartella che preferite,potete attribuire lo stesso attraverso una sempliceprocedura. 

In primoluogo, facciamo clink con il tasto destro del mouse sullacartella dove intendiamo trasferire i file; si apriràuna finestra di dialogo.

Controlliamo a questopunto se l’utente ASPNET è presente nellafinestra Utenti e Gruppi e nel caso ci sia quali sono i suoidiritti.

L’utete ASPNET dovrà avere diritto di Modifica( che automaticamente attiva Lettura, Lettura e eseguzione,Visualizzazione contenuto cartella, Scrittura e ovviamenteModifica.

Se invece l’utente non èpresente nella lista dovete Cliccare su aggiugi e scrivereASPNET
per il vostro computer e di seguito controlla nomi perverificare l’esattezza del nome inserito.

Se il nomenon viene verificato cliccate su avanzate poi trova, e aquesto punto sfogliate gli utenti elencati fino a selezionarequello che stavamo cercando.

Un’altraproblematica con cui possiamo inbattere è quella delledimenzioni dei file, di fatti se non vogliamo trovarci ilserver totalmente colmo ad esempio di avatar da 3mb opiù dobbiamo porre delle limitazioni findall’Upload dello stesso

Quando gliutenti lavorano con il processo di uploading del file, unalimitazione di formato realmente è trasmessaall'assistente per uploading.
 La limitazione di formato di default è 4MB(4096kb);  il trasferimento viene a mancare se un’utente prova a uploadare un file che è piùgrande di 4096kb. 
Quindi una limitazione di formato protegge già lavostra applicazione impedendo ad esempio attacchi informaticichiamati denial of service.

 

Possiamoquindi andare a personalizzare la nostra configurazionedirettamente dal web.config aggiungendo una semplice riga diconfigurazione.

 

<httpRuntimeexecutionTimeout="90"maxRequestLength="4096"useFullyQualifiedRedirectUrl="false"minFreeThreads="8"minLocalRequestFreeThreads="4"appRequestQueueLimit="100"/>

 

 

Questivalori elencati sono soltanto alcuni che possiamospecificare, ma sono quelli di maggiore interesse per non farcadere il nostro server sotto brutti attacchi per colpa dellenotre form.

Però è anche vero che potremmo avere ilbisogno di far caricare file di maggiori dimensioni ai nostriutenti, o per lomeno ai nostri amministratori.

In tal casoandremo a specificare diversamente il valore diMaxrequestlenght, che ad esempio per permetterci di caricareun file da 10mb dovrà essere circa di 11000

maxRequestLength="11000"

 

Ma dovremmoanche allungare i tempi di timeOut e altri valori che potremoaver settato.