da alesslud » ven ott 30, 2009 2:39 pm
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Data;
using System.Data.OleDb;
using MySql.Data.MySqlClient;
namespace FileUpload
{
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{ protected Label lblFile;
protected HtmlInputFile filMyFile;
protected System.Web.UI.WebControls.Label lblInfo;
protected System.Web.UI.WebControls.Button cmdSend;
protected System.Web.UI.WebControls.Image imgFile;
protected System.Web.UI.WebControls.Image imgDB;
protected System.Web.UI.WebControls.Label lblText1;
protected System.Web.UI.WebControls.Label lblText2;
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
this.cmdSend.Click += new System.EventHandler(this.cmdSend_Click);
}
private void Page_Load(object sender, System.EventArgs e)
{
// Verifica se la chiave primaria è passata come parametro
if( Request.QueryString["FileID"] != null )
{
// Carica il file dal database per visualizzarlo su una pagina web
String pippo = Request.QueryString["FileID"];
ShowTheFile(Convert.ToInt32(Request.QueryString["FileID"]));
}
}
private void cmdSend_Click(object sender, System.EventArgs e)
{
// Verifica se il file è stato inviato
if( filMyFile.PostedFile != null )
{
// Prendo la refernce al file inviato
HttpPostedFile myFile = filMyFile.PostedFile;
// Prendo la grandezza del file inviato
int nFileLen = myFile.ContentLength;
// verifico che la grandezza sia maggiore > 0
if( nFileLen > 0 )
{
// Alloco il buffer per la lettura del file
byte[] myData = new byte[nFileLen];
// Leggo il file inviato da un Stream
myFile.InputStream.Read(myData, 0, nFileLen);
string strFilename = Path.GetFileName(myFile.FileName);
this.writeToFileSystem(Server.MapPath(strFilename), ref myData);
// Salvo il file sul database
Object nFileID1 = this.writeToDBMySql(strFilename, myFile.ContentType, ref myData);
lblInfo.Text =
"Filename: " + strFilename + "<br>" +
"Size: " + nFileLen.ToString() + "<p>";
// imposto l'url del file salvato
imgFile.ImageUrl = strFilename;
imgFile.ToolTip = "Questo file è stato salvato sul file system.";
lblText1.Text = imgFile.ImageUrl;
// Set URL dell'oggetto per puntare all'id del file
// per poterlo riprendere dal database
imgDB.ImageUrl = GetMyName() + "?FileID=" + nFileID1.ToString();
imgDB.ToolTip = "Questo file è stato salvato sul database.";
lblText2.Text = imgDB.ImageUrl;
// visualizzo tutto
imgFile.Visible = true;
imgDB.Visible = true;
lblText1.Visible = true;
lblText2.Visible = true;
}
}
}
// Scrive il file nella directory corrente
private void writeToFileSystem(string strPath, ref byte[] Buffer)
{
// Creo il file
FileStream newFile = new FileStream(strPath, FileMode.Create);
// Scrivo il file sul file system
newFile.Write(Buffer, 0, Buffer.Length);
// Chiudo il file
newFile.Close();
}
private Object writeToDBMySql(string strName, string strType, ref byte[] Buffer)
{
ConnectionMysql mySql = new ConnectionMysql();
MySqlConnection conn = mySql.getConnection();
Object nFileID = 0;
MySqlDataAdapter dbAdapt = new MySqlDataAdapter("SELECT * FROM immaginitest", conn);
MySqlCommandBuilder dbCB = new MySqlCommandBuilder(dbAdapt);
DataSet dbSet = new DataSet();
// Popolo il DataSet con i dati
dbAdapt.Fill(dbSet, "immaginitest");
// Punto alla tabella
DataTable dbTable = dbSet.Tables["immaginitest"];
// Crea una nuova riga sul db
DataRow dbRow = dbTable.NewRow();
// Salva i dati
dbRow["FileName"] = strName;
dbRow["FileSize"] = Buffer.Length;
dbRow["ContentType"] = strType;
dbRow["FileData"] = Buffer;
// Add row back to table
dbTable.Rows.Add(dbRow);
// Esegue l'update
dbAdapt.Update(dbSet, "immaginitest");
// Ottengo il FileId creato
if (!dbRow.IsNull("FileID"))
nFileID = dbRow["FileID"];
// chiudo la connessione
conn.Close();
// Return FileID
return nFileID;
}
// Legge il file dal Database e lo visulizza su un Browser
private void ShowTheFile(int FileID)
{
string SQL = "SELECT FileSize, FileData, ContentType FROM immaginitest WHERE FileID = "
+ FileID.ToString();
ConnectionMysql mySql = new ConnectionMysql();
MySqlConnection conn = mySql.getConnection();
MySqlCommand dbComm = new MySqlCommand(SQL, conn);
MySqlDataReader dbRead = dbComm.ExecuteReader();
dbRead.Read();
Response.Clear();
Response.ContentType = (string)dbRead["ContentType"];
// Scrivo il file in un Output Stream
Response.OutputStream.Write((byte[])dbRead["FileData"], 0, Convert.ToInt32(dbRead["FileSize"].ToString()));
conn.Close();
Response.End();
}
private string GetMyName()
{
string strScript = Request.ServerVariables["SCRIPT_NAME"];
int nPos = strScript.LastIndexOf("/");
if( nPos > -1 )
strScript = strScript.Substring(nPos + 1);
return strScript;
}
}
}