Potenza di ASP.NET: uploadare file sul server con pochissime righe di codice. Copiare sul proprio server il file upload.aspx nella posizione in vui si vuole caricare i file sul server Web. La cartella dovrà avere permessi di scrittura da web.

Per caricare file di grosse dimensioni, consiglio la consultazione di questo articolo:http://support.microsoft.com/default.aspx?scid=kb;EN-US;q295626.

La demo non è presente per motivi di sicurezza

Quello che vi presento è un semplicissimo guestbook realizzato in ASP.NET e che si appoggia ad un database Access per l’archiviazione dei messaggi

Statmentor.NET è un’applicazione completa in C# che consente di implementare in poche mosse un sistema di statistiche per proprio il sito. Il funzionamento è simile a quello dei tanti servizi disponibili per questa funzione. L’applicazione genera automaticamente il codice HTML da inserire nelle pagine da monitorare e da quel momento inizia la sua opera di misurazione degli accessi.

Essenziale il corredo di funzioni. Statmentor.NET conteggia su base temporale i visitatori unici, le pagine viste e tiene traccia dei referer.

Importante la corretta installazione sul server (sul quale dovrà, ovviamente, essere presente il framework .NET). Per prima cosa si dovrà trasferire nella cartella dei database il file statmentor.mdb. Quindi si dovrà modificare una riga del fondamentale file di configurazione Web.config. Il path qui sotto riportato andrà sostituito con quello reale del database:

<add key=”StatMentorConnString” value=”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\home\xxxxxxx\database\statmentor.mdb” />

Il file Web.config andrà quindi copiato nella root del sito, così come global.asax. Nella cartella bin, in genere presente nella root di tutti i server con supporto .NET, andrà invece trasferita la libreria StatMentorNET.dll. Tutti gli altri file possono essere copiati in una cartella destinata all’applicazione

Quando un’applicazione si trova nella fase di test è molto utile venire a conoscenza di tutti gli errori che si verificano durante l’utilizzo dei visitatori delle nostre pagine ASP.NET.

All’interno del Global.asax troviamo un nuovo evento (che in ASP non esisteva): Application_Error. Questo evento si verifica ogni qualvolta il server va in errore, sia per errori di codice (500), sia per errori di autorizzazione (401) che di pagine non trovate (404).

Con poche righe, è possibile inviarci un’email ogni qualvolta l’evento viene richiamato.


<%@ Application language=”C#” %>

<%@ Import Namespace=”System.Diagnostics” %>

<script runat=”server”>

public void Application_Error(Object sender, EventArgs e) {

StringBuilder strError = new StringBuilder();

int innerLevel = 0;

Exception ex = Server.GetLastError();

strError.Append(“<font face=tahoma size=1>”);

while ( ex != null ) {

strError.AppendFormat(“Application Error (inner={0}): {1}<br><br>”, innerLevel, ex.GetType().Name);

strError.Append( “<b><font size=3 color=#800000>” + ex.Message + “</font></b><br><br>” );

strError.Append( “<b>Source:</b> ” + ex.Source + “<br><br>” );

string strStack = ex.StackTrace;

strStack = strStack.Replace(“\r\n”, “<br>”);

strError.Append( “<b>StackTrace:</b> <table cellspacing=0 cellpadding=2 border=0 bgcolor=#FFFFCC><tr><td><font face=tahoma size=1>” + strStack + “</font></td></tr></table><br>” );

ex = ex.InnerException;

innerLevel++;

}

strError.Append(“Indirizzo IP client: ” + (string) Request.ServerVariables[“REMOTE_ADDR”]);

strError.Append(“</font>”);

// Spedisco l’email con la segnalazione dell’errore

System.Web.Mail.MailMessage mailMessage = new System.Web.Mail.MailMessage();

mailMessage.From = “webmaster@tuosito.com”;

mailMessage.To = “tuocasella@diposta.com”;

mailMessage.Subject = “Si è verificato un errore nel tuo sito”;

mailMessage.BodyFormat = System.Web.Mail.MailFormat.Html;

mailMessage.Body = strError.ToString();

try {

System.Web.Mail.SmtpMail.SmtpServer = “localhost”;

System.Web.Mail.SmtpMail.Send(mailMessage);

Response.Redirect(“PaginaDiErrore.html”); // Rimando il client ad una pagina generica di errore

} catch (Exception ex2) {

// Il sistema non è riuscito ad inviare l’email,

// scrivo il problema nel Debug

Debug.WriteLine( “Eccezione durante l’invio dell’e-mail: ” + ex2.GetType().Name );

Debug.WriteLine( ex2.Message );

Debug.WriteLine( ex2.StackTrace );

}

}

</script>

Per mezzo di questo codice è possibile visualizzare una miniatura dell’immagine indicata via GET:

<%@ Page Language=”C#” %>

<%@ import Namespace=”System.Drawing” %>

<%@ import Namespace=”System.Drawing.Imaging” %>

<%@ import Namespace=”System.Text.RegularExpressions” %>

<script runat=”server”>

int MaxWidth = 100; // Larghezza massima dopo il quale l’immagine viene ridimensionata

int MaxHeight = 100; // Altezza massima dopo il quale l’immagine viene ridimensionata

int ScaleFactor = 20; // Fattore di scala per la miniatura

System.Drawing.Image oldImage, newImage;

void Page_Load(Object sender, EventArgs e) {

if ( Request.QueryString[“FileName”] != null ) {

string strFileName = Convert.ToString(Request.QueryString[“FileName”]);

if ( Request.QueryString[“ScaleFactor”] != null && Convert.ToString(Request.QueryString[“ScaleFactor”]) != “” && IsInteger(Convert.ToString(Request.QueryString[“scalefactor”])) ) ScaleFactor = Convert.ToInt32(Request.QueryString[“ScaleFactor”]);

if ( strFileName != “” ) {

try {

oldImage = System.Drawing.Image.FromFile( Server.MapPath(strFileName) );

if ( oldImage.Width > MaxWidth || oldImage.Height > MaxHeight ) {

// Immagine troppo grande, visualizzo la miniatura

newImage = oldImage.GetThumbnailImage( (oldImage.Width*ScaleFactor/100), (oldImage.Height*ScaleFactor/100), null, IntPtr.Zero);

Response.ContentType = “image/jpeg”;

newImage.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

oldImage.Dispose();

newImage.Dispose();

oldImage = null;

newImage = null;

} else {

// Immagine piccola, non faccio nulla

Response.ContentType = “image/jpeg”;

oldImage.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

oldImage.Dispose();

oldImage = null;

}

} catch (Exception ex) {

Response.Write(ex.Message);

}

}

}

}

private bool IsInteger(string strTmp) {

Regex objNotIntPattern = new Regex(“[^0-9-]”);

Regex objIntPattern = new Regex(“^-[0-9]+$|^[0-9]+$”);

return !objNotIntPattern.IsMatch(strTmp) && objIntPattern.IsMatch(strTmp);

}

</script>

Questo codice andrà salvato come file ASPX e dovrà essere richiamato semplicemente con:

<img src=”Pagina.aspx?FileName=Immagine.jpg&ScaleFactor=20″ border=”0″ alt=””>

Questo codice permette di creare un’immagine on the fly utilizzando un file già esistente e inserendo del testo personalizzato sulla stessa immagine.

<%@ Page Language=”C#” %>

<%@ import Namespace=”System.Drawing” %>

<%@ import Namespace=”System.Drawing.Imaging” %>

<%@ import Namespace=”System.IO” %>

<script runat=”server”>

void Page_Load(object sender, EventArgs e) {

CreaImmagine(“http://freeasp.html.it“);

}

void CreaImmagine(string drawString) {

// Importo il file di sfondo

System.Drawing.Image objBitmap =

System.Drawing.Image.FromFile(Server.MapPath(“logo_freeasp.png”));

Graphics objGraphic = Graphics.FromImage(objBitmap);

// Formatto il testo da inserire

Font drawFont = new Font(“Tahoma”, 8);

SolidBrush drawBrush = new SolidBrush(Color.White);

// La posizione del testo

PointF drawPoint = new PointF(50.0F, 80.0F);

// Disegno la stringa di testo sull’immagine

objGraphic.DrawString(drawString, drawFont, drawBrush, drawPoint);

// Imposto la tipologia di output

Response.ContentType = “image/jpeg”;

// Salvo in output l’immagine

objBitmap.Save(Response.OutputStream, ImageFormat.Jpeg);

objBitmap.Dispose();

}

</script>

In grassetto nello script abbiamo evidenziato la scritta che comparirà sotto l’immagine specificata

Questo semplice script permette di formattare direttamente dal codice un datagrid posizionato nella pagina ASPX.

<%@ Page Language=”C#” %>

<%@ import Namespace=”System.Drawing” %>

<script runat=”server”>

void Page_Load(Object sender, EventArgs e) {

string[] arrDati = new string[5] { “HTML.it”, “freeASP.it”, “Flash-MX.it”, “freePHP.it”, “Corsi HTML.it” };

DataGrid1.DataSource = arrDati;

DataGrid1.DataBind();

}

void DataGrid1_ItemCreated(Object sender, DataGridItemEventArgs e) {

if (e.Item.ItemType == ListItemType.Item) {

e.Item.BackColor = Color.FromArgb(105, 139, 185);

for (int i=0; i < DataGrid1.Columns.Count; i++) {

TableCell td = e.Item.Cells[i];

td.CssClass = “nome_classe_css”;

}

}

if (e.Item.ItemType == ListItemType.AlternatingItem) {

e.Item.BackColor = Color.FromArgb(167, 187, 215);

for (int i=0; i < DataGrid1.Columns.Count; i++) {

TableCell td = e.Item.Cells[i];

td.CssClass = “nome_classe_css”;

}

}

}

</script>

<html>

<head>

</head>

<body>

<form runat=”server”>

<asp:DataGrid id=”DataGrid1″ runat=”server” OnItemCreated=”DataGrid1_ItemCreated” ShowHeader=”False”></asp:DataGrid>

</form>

</body>

</html>