Antonio Feliziani
a- a+

FileUpload

Con As.Net 1.1 per Uplodare un file dovevamo utilizzare l'oggetto HTML FileUpload. Questo controllo inserisce un'elemento < input type="file"> nella vostra pagina web per permettere all'utilizzatore finale di caricare un file nel server. 

Per usare il file, tuttavia, avete dovuto fare una coppia delle modifiche alla pagina. Per esempio, siete stati tenuti ad 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 di file ancora più semplice. Nel dare ad una pagina la possibilità per uploadare i file, includete semplicemente il nuovo controllo <asp:FileUpload > ed ASP.net fà il resto, compreso la aggiunta dell'attributo del enctype all'elemento <form> della pagina.

Dopo che il file viene uppato nel server, potete anche leggere le proprietà dell'oggetto appena uppato e visualizzarle nel codebehind per delle vostre operazioni o semplicemnte per visualizzarle a monitor.

Di seguito vi mostro un' esempio dell'utilizzo del nuovo controllo di FileUpload. La pagina contiene un singolo controllo di FileUpload, più un botton e una label.

 

Default.aspx.vb

 

PartialClass _Default

   Inherits System.Web.UI.Page

ProtectedSub 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

       Else

            Label1.Text = "You have not specified a file."

       End If

    End Sub

EndClass

 

 

 

  L’HTML della 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 a Broswer

 

<!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 avremo questo output nella label

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

Potreste ricevere errori quando i vostri utilizzatori finali tenteranno di uppare dei file nel  vostro web server con il controllo di FileUpload della vostra applicazione. 
Questo potrebbe accadere perché la cartella di destinazione non è scrivibile dall’utente usato da ASP.net. 

Se ASP.net non ha il permesso di scrivere nella cartella che preferite, potete attribuire lo stesso attraverso una semplice procedura. 

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

Controlliamo a questo punto se l’utente ASPNET è presente nella finestra Utenti e Gruppi e nel caso ci sia quali sono i suoi diritti.

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

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

Se il nome non viene verificato cliccate su avanzate poi trova, e a questo punto sfogliate gli utenti elencati fino a selezionare quello che stavamo cercando.

Un’altra problematica con cui possiamo inbattere è quella delle dimenzioni dei file, di fatti se non vogliamo trovarci il server totalmente colmo ad esempio di avatar da 3mb o più dobbiamo porre delle limitazioni fin dall’Upload dello stesso

Quando gli utenti lavorano con il processo di uploading del file, una limitazione di formato realmente è trasmessa all'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à la vostra applicazione impedendo ad esempio attacchi informatici chiamati denial of service.

 

Possiamo quindi andare a personalizzare la nostra configurazione direttamente dal web.config aggiungendo una semplice riga di configurazione.

 

<httpRuntime

executionTimeout="90"

maxRequestLength="4096"

useFullyQualifiedRedirectUrl="false"

minFreeThreads="8"

minLocalRequestFreeThreads="4"

appRequestQueueLimit="100"

/>

 

 

Questi valori elencati sono soltanto alcuni che possiamo specificare, ma sono quelli di maggiore interesse per non far cadere il nostro server sotto brutti attacchi per colpa delle notre form.

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

In tal caso andremo a specificare diversamente il valore di Maxrequestlenght, che ad esempio per permetterci di caricare un file da 10mb dovrà essere circa di 11000

maxRequestLength="11000"

 

Ma dovremmo anche allungare i tempi di timeOut e altri valori che potremo aver settato.



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Sara
Hai dubbi su questo articolo?