Nel corso di questo articolo, analizzeremo come si effettua uno script di upload tramite ASP.NET sfruttando come linguaggio di scripting VB. Prima di incominciare a descrivere la parte tecnica, volevo "sollevare" moralmente tutti quanti dicendo che con ASP.NET l'operazione di upload è molto più semplice e facile da realizzare rispetto l'asp 3.0. (Si osservi l'articolo scritto da Davide Vogliotti per maggiori informazioni). Il codice necessario è pronto all'uso per l'upload è il seguente:
<%@ page language="VB" %>
<script runat="Server">
Sub Page_Load(Sender as Object, e as EventArgs)
dim strPercorsoFileUpload as string
strPercorsoFileUpload = "c:cartellaUpload"
dim miaCartella as string
miaCartella = Dir(strPercorsoFileUpload , vbDirectory)
if miaCartella=""
MkDir(strPercorsoFileUpload)
end if
End Sub
Sub caricaFile(Sender as Object, e as EventArgs)
'Ricavo il nome del file con percorso
dim strFile
strFile = mioFile.PostedFile.FileName
'Ricavo il nome del file SENZA percorso
Dim strNomeFile as string
strNomeFile = System.IO.Path.GetFileName(strFile)
dim strPercorsoFileUpload as string
strPercorsoFileUpload = "c:cartellaUpload"
dim strMessaggioFinale as string
'Effettuo UPLOAD con controllo errore
Try
mioFile.PostedFile.SaveAs( strPercorsoFileUpload & "" & strNomeFile)
strMessaggioFinale = "Upload avvenuto correttamente."
strMessaggioFinale = strMessaggioFinale & "Dati del file copiato:<br />"
strMessaggioFinale = strMessaggioFinale & "Dimensione : " & mioFile.PostedFile.ContentLength & " bytes<br />"
strMessaggioFinale = strMessaggioFinale & "Tipologia File : " & mioFile.PostedFile.ContentType & "<br />"
strMessaggioFinale = strMessaggioFinale & "Percorso File : " & mioFile.PostedFile.FileName & "<br />"
catch strEccezzione As Exception
strMessaggioFinale = "Errore: UPLOAD FALLITO.<br />"
strMessaggioFinale = strMessaggioFinale & strEccezzione.ToString
End Try
'Mostro esito upload a video
lbEsito.text = strMessaggioFinale
End Sub
</script>
<html>
<head>
<title>Upload File in VB.NET</title>
</head>
<body>
<form runat="server" id="frmUpload" method="post" EncType="multipart/form-data">
<asp:Label id="Label1" runat="server" Text="File 1" />
<br />
<Input ID="mioFile" Type="File" RunAt="Server">
<br />
<asp:Button id="btUpload" text="Effettua Upload" OnClick="caricaFile" runat="server" />
<br />
<asp:label id="lbEsito" runat="Server" />
</form>
</body>
</html>
Ora per dobbiamo capire, per un corretto utilizzo futuro, il funzionamento che si "nasconde" al suo interno. Come prima operazione osserviamo il form che viene creato all'interno della parte html:
<form runat="server" id="frmUpload" method="post" EncType="multipart/form-data">
<asp:Label id="Label1" runat="server" Text="File 1" />
<br />
<Input ID="mioFile" Type="File" RunAt="Server">
<br />
<asp:Button id="btUpload" text="Effettua Upload" OnClick="caricaFile" runat="server" />
<br />
<asp:label id="lbEsito" runat="Server" />
</form>
Subito nel tag form, possiamo notare due elementi insoliti. Il primo EncType="multipart/form-data"
serve per poter inviare effettivamente i dati una volta inviato il file, ed il secondo (tipico dei form scritti con tecnologia ASP.NET) runat="server"
serve ad indicare la necessità di elaborare il form sul server prima di inviare al client la pagina richiesta. All'interno del form, è possibile trovare 2 label, un bottone ed un campo di tipo file. La prima label(Label1) contiene solo la scritta "file 1". La seconda, come vedremo in seguito, mostrerà il raggiungimento o il fallimento dell'upload. Una volta scelto il file su cui effettuare l'upload, è necessario effettuare un click sul pulsante. Una volta fattò ciò, il controllo dello script, viene rimandato al server. Ora vedremo cosa accade sul server...
Prima di tutto, anche se non viene effettuato l'upload ma solo aperta la pagina, viene creata (se e solo se è inesistente) la cartella che dovrà contenere i nostri file in seguito all'upload.
Sub Page_Load(Sender as Object, e as EventArgs)
dim strPercorsoFileUpload as string
strPercorsoFileUpload = "c:cartellaUpload"
dim miaCartella as string
miaCartella = Dir(strPercorsoFileUpload , vbDirectory)
if miaCartella=""
MkDir(strPercorsoFileUpload)
end if
End Sub
Nella sub-routine appena proposta, tramite la funzione dir, si va a verificare la presenza della directory specificata nella variabile strPercorsoFileUpload. Se non vi è, viene creata. Ora, analizziamo la parte interessante dello script: L'upload vero e proprio.
Sub caricaFile(Sender as Object, e as EventArgs)
' Ricavo il nome del file con percorso
dim strFile
strFile = mioFile.PostedFile.FileName
' Ricavo il nome del file SENZA percorso
Dim strNomeFile as string
strNomeFile = System.IO.Path.GetFileName(strFile)
dim strPercorsoFileUpload as string
strPercorsoFileUpload = "c:cartellaUpload"
dim strMessaggioFinale as string
' Effettuo UPLOAD con controllo errore
Try
mioFile.PostedFile.SaveAs( strPercorsoFileUpload & "" & strNomeFile)
strMessaggioFinale = "Upload avvenuto correttamente."
strMessaggioFinale = strMessaggioFinale & "Dati del file copiato:<br />"
strMessaggioFinale = strMessaggioFinale & "Dimensione : " & mioFile.PostedFile.ContentLength & " bytes<br />"
strMessaggioFinale = strMessaggioFinale & "Tipologia File : " & mioFile.PostedFile.ContentType & "<br />"
strMessaggioFinale = strMessaggioFinale & "Percorso File : " & mioFile.PostedFile.FileName & "<br />"
Catch strEccezzione As Exception
strMessaggioFinale = "Errore: UPLOAD FALLITO.<br />"
strMessaggioFinale = strMessaggioFinale & strEccezzione.ToString
End Try
' Mostro esito upload a video
lbEsito.text = strMessaggioFinale
End Sub
La breve sub-routine appena proposta è il cuore del nostro script di upload. Come prima operazione, si cerca di ricavare il percorso completo del file su cui effettuare l'upload e una volta ricavato si estrae il nome del file senza il relativo percorso. Ora, tramite una semplice riga di codice:
mioFile.PostedFile.SaveAs( strPercorsoFileUpload & "" & strNomeFile)
viene effettuato l'upload.
L'upload viene giustamente effettuato all'interno di un blocco try-catch-end
per poter gestire un eventuale errore. Se l'operazione di upload è creata correttamente, il messaggio finale(contenuto nella variabile strMessaggioFinale) conterrà le seguenti informazione:
- Notifica di upload correttamente eseguito.
- Dimensione del file copiato
strMessaggioFinale = strMessaggioFinale & "Dimensione : " & mioFile.PostedFile.ContentLength & " bytes<br />"
- Tipologia del file copiato:
strMessaggioFinale = strMessaggioFinale & "Tipologia File : " & mioFile.PostedFile.ContentType & "<br />"
- Percorso del file copiato riferito al nostro disco rigido.
strMessaggioFinale = strMessaggioFinale & "Percorso File : " & mioFile.PostedFile.FileName & "<br />"
In caso di errore, verrà mostrata una scritta di errore ed il relativo errore generatosi.
strMessaggioFinale = "Errore: UPLOAD FALLITO.<br />"
strMessaggioFinale = strMessaggioFinale & strEccezzione.ToString
Una volta preparata la stringa strMessaggioFinale, la si visualizza all'interno di una label presente nella parte html della pagina.
<asp:label id="lbEsito" runat="Server" />