Listado de código
using System;
  using System.Collections;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Web;
namespace F.Web.IO
{
    public class Download
    {
        #region Private Members
        private string _ConnectionString;
        private string _TableName;
        private string _ContentField;
        private string _FileNameField;
        private string _ContentTypeField;
        private string _KeyField;
        #endregion
        #region Public Properties
        /// -----------------------------------------------------------------------------
        /// <summary>
        /// Database Connection String Property
        /// </summary>
        /// <value>string</value>
        /// <remarks>
        /// </remarks>
        /// <history>
        ///   [bonifacio]  7/4/2006  Created
        /// </history>
        /// -----------------------------------------------------------------------------
        public string ConnectionString
        {
            get
            {
                return _ConnectionString;
            }
            set
            {
                _ConnectionString = value;
            }
        }
        /// -----------------------------------------------------------------------------
        /// <summary>
        /// Name of documents repository table
        /// </summary>
        /// <value>string</value>
        /// <remarks>
        /// </remarks>
        /// <history>
        ///   [bonifacio]  7/4/2006  Created
        /// </history>
        /// -----------------------------------------------------------------------------
        public string TableName
        {
            get
            {
                return _TableName;
            }
            set
            {
                _TableName = value;
            }
        }
        /// -----------------------------------------------------------------------------
        /// <summary>
        /// Content field in document repository table
        /// </summary>
        /// <value>string</value>
        /// <remarks>
        /// </remarks>
        /// <history>
        ///   [bonifacio]  7/4/2006  Created
        /// </history>
        /// -----------------------------------------------------------------------------
        public string ContentField
        {
            get
            {
                return _ContentField;
            }
            set
            {
                _ContentField = value;
            }
        }
        /// -----------------------------------------------------------------------------
        /// <summary>
        /// Filename field in document repository
        /// </summary>
        /// <value>string</value>
        /// <remarks>
        /// </remarks>
        /// <history>
        ///   [bonifacio]  7/4/2006  Created
        /// </history>
        /// -----------------------------------------------------------------------------
        public string FileNameField
        {
            get
            {
                return _FileNameField;
            }
            set
            {
                _FileNameField = value;
            }
        }
        /// -----------------------------------------------------------------------------
        /// <summary>
        /// Content Type field in document repository
        /// </summary>
        /// <value>string</value>
        /// <remarks>
        /// </remarks>
        /// <history>
        ///   [bonifacio]  7/4/2006  Created
        /// </history>
        /// -----------------------------------------------------------------------------
        public string ContentTypeField
        {
            get
            {
                return _ContentTypeField;
            }
            set
            {
                _ContentTypeField = value;
            }
        }
        /// -----------------------------------------------------------------------------
        /// <summary>
        /// Key Field of document repository
        /// </summary>
        /// <value>string</value>
        /// <remarks>
        /// </remarks>
        /// <history>
        ///   [bonifacio]  7/4/2006  Created
        /// </history>
        /// -----------------------------------------------------------------------------
        public string KeyField
        {
            get
            {
                return _KeyField;
            }
            set
            {
                _KeyField = value;
            }
        }
        #endregion
        #region Methods
        /// -----------------------------------------------------------------------------
        /// <summary>
        /// Chuck BLOB to file converter
        /// </summary>
        /// <param name="DocumentoID">Document identifier</param>
        /// <returns></returns>
        /// <remarks>
        /// </remarks>
        /// <history>
        ///             [bonifacio]        7/4/2006           Created
        /// </history>
        /// -----------------------------------------------------------------------------
        public System.IO.StringWriter SqlChunkBLOB2File(long DocumentoID)
        {
            System.IO.StringWriter functionReturnValue = null;
            int PictureCol = 0;
            // position of Picture column in DataReader
            int BUFFER_LENGTH = 32768;
            // chunk size
            SqlConnection cn = new SqlConnection(this.ConnectionString);
            //
            // Make sure that Photo is non-NULL and return TEXTPTR to it.
            //
            SqlCommand cmdGetPointer = new SqlCommand("SELECT @Pointer=TEXTPTR([" + _ContentField + "]), @Length=DataLength([" + _ContentField + "]) FROM " + _TableName + " WHERE " + _KeyField + "=" + DocumentoID, cn);
            SqlParameter PointerOutParam = cmdGetPointer.Parameters.Add("@Pointer", SqlDbType.VarBinary, 500);
            PointerOutParam.Direction = ParameterDirection.Output;
            SqlParameter LengthOutParam = cmdGetPointer.Parameters.Add("@Length", SqlDbType.Int);
            LengthOutParam.Direction = ParameterDirection.Output;
            cn.Open();
            cmdGetPointer.ExecuteNonQuery();
            if (object.ReferenceEquals(PointerOutParam.Value, DBNull.Value))
            {
                cn.Close();
                return functionReturnValue;
                // Add code to deal with NULL BLOB.
            }
            //
            // Set up READTEXT command, parameters, and open BinaryReader.
            //
            SqlCommand cmdReadBinary = new SqlCommand("READTEXT [" + _TableName + "].[" + _ContentField + "] @Pointer @Offset @Size HOLDLOCK", cn);
            SqlParameter PointerParam = cmdReadBinary.Parameters.Add("@Pointer", SqlDbType.VarBinary, 16);
            SqlParameter OffsetParam = cmdReadBinary.Parameters.Add("@Offset", SqlDbType.Int);
            SqlParameter SizeParam = cmdReadBinary.Parameters.Add("@Size", SqlDbType.Int);
            SqlDataReader dr = null;
            int Offset = 0;
            OffsetParam.Value = Offset;
            byte[] Buffer = new byte[BUFFER_LENGTH];
            //
            // Read buffer full of data and write to the file stream.
            //
            do
            {
                PointerParam.Value = PointerOutParam.Value;
                //
                // Calculate the buffer size - may be less than BUFFER_LENGTH for the last block.
                //
                if (Offset + BUFFER_LENGTH >= LengthOutParam.Value)
                {
                    SizeParam.Value = LengthOutParam.Value - Offset;
                }
                else
                {
                    SizeParam.Value = BUFFER_LENGTH;
                }
                dr = cmdReadBinary.ExecuteReader(CommandBehavior.SingleResult);
                dr.Read();
                dr.GetBytes(PictureCol, 0, Buffer, 0, SizeParam.Value);
                //dr.GetChars(PictureCol, 0, BufferChar, 0, SizeParam.Value)
                dr.Close();
                //stringWrite.Write(BufferChar, 0, SizeParam.Value)
                HttpContext.Current.Response.BinaryWrite(Buffer);
                Offset += SizeParam.Value;
                OffsetParam.Value = Offset;
            } while (!(Offset >= LengthOutParam.Value));
            cn.Close();
            return functionReturnValue;
        }
        /// -----------------------------------------------------------------------------
        /// <summary>
        /// Chuck BLOB to File
        /// </summary>
        /// <param name="DocumentoID">Document identifier</param>
        /// <returns></returns>
        /// <remarks>
        /// </remarks>
        /// <history>
        ///             [bonifacio]        8/28/2006         Created
        /// </history>
        /// -----------------------------------------------------------------------------
        public static System.IO.StringWriter SqlChunkBLOB2File(string pConnectionString, long DocumentoID, string pContentField, string pTableName, string pKeyField)
        {
            System.IO.StringWriter functionReturnValue = null;
            int PictureCol = 0;
            // position of Picture column in DataReader
            int BUFFER_LENGTH = 32768;
            // chunk size
            SqlConnection cn = new SqlConnection(pConnectionString);
            //
            // Make sure that Photo is non-NULL and return TEXTPTR to it.
            //
            SqlCommand cmdGetPointer = new SqlCommand("SELECT @Pointer=TEXTPTR([" + pContentField + "]), @Length=DataLength([" + pContentField + "]) FROM " + pTableName + " WHERE " + pKeyField + "=" + DocumentoID, cn);
            SqlParameter PointerOutParam = cmdGetPointer.Parameters.Add("@Pointer", SqlDbType.VarBinary, 500);
            PointerOutParam.Direction = ParameterDirection.Output;
            SqlParameter LengthOutParam = cmdGetPointer.Parameters.Add("@Length", SqlDbType.Int);
            LengthOutParam.Direction = ParameterDirection.Output;
            cn.Open();
            cmdGetPointer.ExecuteNonQuery();
            if (object.ReferenceEquals(PointerOutParam.Value, DBNull.Value))
            {
                cn.Close();
                return functionReturnValue;
                // Add code to deal with NULL BLOB.
            }
            //
            // Set up READTEXT command, parameters, and open BinaryReader.
            //
            SqlCommand cmdReadBinary = new SqlCommand("READTEXT [" + pTableName + "].[" + pContentField + "] @Pointer @Offset @Size HOLDLOCK", cn);
            SqlParameter PointerParam = cmdReadBinary.Parameters.Add("@Pointer", SqlDbType.VarBinary, 16);
            SqlParameter OffsetParam = cmdReadBinary.Parameters.Add("@Offset", SqlDbType.Int);
            SqlParameter SizeParam = cmdReadBinary.Parameters.Add("@Size", SqlDbType.Int);
            SqlDataReader dr = null;
            int Offset = 0;
            OffsetParam.Value = Offset;
            byte[] Buffer = new byte[BUFFER_LENGTH];
            //
            // Read buffer full of data and write to the file stream.
            //
            do
            {
                PointerParam.Value = PointerOutParam.Value;
                //
                // Calculate the buffer size - may be less than BUFFER_LENGTH for the last block.
                //
                if (Offset + BUFFER_LENGTH >= LengthOutParam.Value)
                {
                    SizeParam.Value = LengthOutParam.Value - Offset;
                }
                else
                {
                    SizeParam.Value = BUFFER_LENGTH;
                }
                dr = cmdReadBinary.ExecuteReader(CommandBehavior.SingleResult);
                dr.Read();
                dr.GetBytes(PictureCol, 0, Buffer, 0, SizeParam.Value);
                //dr.GetChars(PictureCol, 0, BufferChar, 0, SizeParam.Value)
                dr.Close();
                //stringWrite.Write(BufferChar, 0, SizeParam.Value)
                HttpContext.Current.Response.BinaryWrite(Buffer);
                Offset += SizeParam.Value;
                OffsetParam.Value = Offset;
            } while (!(Offset >= LengthOutParam.Value));
            cn.Close();
            return functionReturnValue;
        }
        /// <summary>
        /// Download a file from Database taking his ID as parameter
        /// </summary>
        /// <param name="pdocumentID">DocumentID</param>
        /// <param name="disposition">Content-disposition parameter, can be as Attachment or embeded</param>
        public void DownloadFile(long pdocumentID, string disposition)
        {
            SqlDataReader dr = null;
            SqlConnection cn = new SqlConnection(_ConnectionString);
            SqlCommand cmd = null;
            try
            {
                cn.Open();
                string command = "SELECT [" + _ContentField + "],[" + _ContentTypeField + "],[" + _FileNameField + "], Length=DataLength([" + _ContentField + "])  FROM [" + _TableName + "] WHERE [" + _KeyField + "]=" + pdocumentID;
                cmd = cn.CreateCommand();
                cmd.CommandText = command;
                cmd.CommandType = CommandType.Text;
                dr = cmd.ExecuteReader();
                if (dr.Read())
                {
                    byte[] buffer = null;
                    dr.GetBytes(0, 0, buffer, 0, System.Convert.ToInt32(dr["Length"]));
                    HttpContext.Current.Response.Clear();
                    HttpContext.Current.Response.Charset = "";
                    HttpContext.Current.Response.ContentType = dr[_ContentTypeField].ToString();
                    HttpContext.Current.Response.AddHeader("Content-Disposition", disposition + ";Filename=" + dr[_FileNameField].ToString());
                    dr.Close();
                    HttpContext.Current.Response.BinaryWrite(buffer);
                }
            }
            catch
            {
                if (Text.Input.IsNotNull(dr))
                    dr.Close();
                throw;
            }
            finally {
                if (cn != null) {
                    cn.Close();
                }
            }
        }
        #endregion
    }
    /// <summary>
    /// Summary description for Upload.
    /// </summary>
    public class Upload
    {
        #region Private members
        F.Web.IO.Upload.ConnectionType connectiontype = ConnectionType.Sql;
        //string connstring ="";
        string filename, fileextension;
        int filesize;
        string destinationpath;
        bool imagesonly = false;
        bool overwritefile = false;
        int maxsize = 2000000;
        string db_table;
        string filecontenttype;
        SaveTo saveto = SaveTo.Directory;
        bool autocreatedirectory = false;
        string allowed_extension = "";
        string connectionstring;
        private System.Web.UI.HtmlControls.HtmlInputFile file;
        byte[] filebinary;
        string dbFieldsIdentifier = "";
        #endregion
        #region Properties
        /// <summary>
        /// Stores each file properties, set in WebUpload.Upload properties
        /// in a key value that represents each field names of the DataTable
        /// to WebUpload.Upload can relate each property to a tablefield and 
        /// save data to database.
        /// </summary>
        public System.Collections.Hashtable DBFields = new System.Collections.Hashtable();
        /// <summary>
        /// (string) Specifies the DB Connection to use when SaveTo.Database
        /// is specified.
        /// </summary>
        public string ConnectionString
        {
            get { return this.connectionstring; }
            set { this.connectionstring = value; }
        }
        public string fileName
        {
            get { return this.filename; }
            set { this.filename = value; }
        }
        public string fileExtension
        {
            get { return this.fileextension; }
            set { this.fileextension = value; }
        }
        private SaveTo saveTo
        {
            get { return this.saveto; }
            set { this.saveto = value; }
        }
        /// <summary>
        /// (int) Returns the Uploaded File's filesize int bytes.
        /// </summary>
        public int fileSize
        {
            get { return this.filesize; }
        }
        /// <summary>
        /// (string) Gets or Sets Table identifier field name.Must specify also DBField
        /// </summary>
        public string DBFieldsIdentifier
        {
            get { return this.dbFieldsIdentifier; }
            set { this.dbFieldsIdentifier = value; }
        }
        /// <summary>
        /// (string) Set or Get allowed File Extensions for the UploadFile.
        /// Must be separated by a comma (",")
        /// If not set, any file extension is allowed.
        /// </summary>
        /// <example>
        ///  allowedExtensions = " jpg, exe, gif, html";
        /// </example>
        public string allowedExtensions
        {
            get { return this.allowed_extension; }
            set { this.allowed_extension = value; }
        }
        private enum SaveTo
        {
            Directory,
            Database
        } ;
        /// <summary>
        /// (boolean) Specifies if the Uploaded file must be an image type format only files.
        /// Only BMP JPEG/JPG PNG and GIF image file format are supported.
        /// Default = false
        /// </summary>
        public bool imagesOnly
        {
            get { return this.imagesonly; }
            set { this.imagesonly = value; }
        }
        /// <summary>
        /// (boolean) If set to true, and if the specified destination directory
        /// does not exists, the class automatically creates the directory.
        /// Default = false.
        /// </summary>
        public bool autoDirectoryCreation
        {
            get { return this.autocreatedirectory; }
            set { this.autocreatedirectory = value; }
        }
        /// <summary>
        /// (string) Specifies the server path where to save the Uploaded file.
        /// Must include a \ and the end of string
        /// Doesn't work if SaveTo.Database is specified
        /// </summary>
        public string destinationPath
        {
            get { return this.destinationpath; }
            set { this.destinationpath = value; }
        }
        /// <summary>
        /// (boolean) Specifies if the Uploaded file should overwrite
        /// files with the same destination filename. 
        /// If set to false, the filename of the Uploaded file will be
        /// changed to filename001 and so on...
        /// Default = false
        /// </summary>
        public bool overwriteFile
        {
            get { return this.overwritefile; }
            set { this.overwritefile = value; }
        }
        /// <summary>
        /// (int) Specifies the Maximum Allowed File Size of the Uploaded file.
        /// Default is 2.000.000 bytes = 2Mbytes.
        /// </summary>
        public int maxSize
        {
            get { return this.maxsize; }
            set { this.maxsize = value; }
        }
        /// <summary>
        /// (string) Specifies the TableName of where to save the Uploaded file.
        /// Only works if SaveTo.Database is specified. Must specify also DBFields
        /// </summary>
        public string DBTable
        {
            get { return this.db_table; }
            set { this.db_table = value; }
        }
        /// <summary>
        /// (string) Returns the Content Type of the Uploaded File
        /// </summary>
        public string fileContentType
        {
            get { return this.filecontenttype; }
            //i removed the set for security reasons
            //set{this.filecontenttype = value; }
        }
        /// <summary>
        /// (byte[]) Returns the content of the Uploaded File
        /// </summary>
        public byte[] fileBinary
        {
            get { return this.filebinary; }
        }
        #endregion
        #region Constructors
        public Upload(System.Web.UI.HtmlControls.HtmlInputFile formfieldName)
        {
            this.getFileFromHTMLInputFile(formfieldName);
        }
        public Upload()
        {
        }
        #endregion
        #region Methods
        /// <summary>
        /// Does the file Upload . If any, returns an error string
        /// </summary>
        /// <returns></returns>
        public string DoUpload()
        {
            if (this.saveTo == SaveTo.Directory)
            {
                string NewFileName = this.fileName;
                if (this.allowedExtensions.Length > 0)
                {
                    if (!checkAllowedExtensions())
                    {
                        return "File Extension not allowed!";
                    }
                }
                if (this.imagesOnly)
                {
                    if (!checkFileIsImage())
                    {
                        return "File is not an image or bitmap type";
                    }
                }
                if (!this.createDirectory(this.destinationPath))
                {
                    return "Couldn't create destination path.Please set  autoDirectoryCreation property to True.";
                }
                if (this.fileSize > this.maxSize)
                {
                    return String.Format("File's size ({1} bytes) extends allowed MaxSize({0} bytes)", this.maxSize.ToString(), this.fileSize.ToString());
                }
                if (!this.overwriteFile)
                {
                    NewFileName = this.GetUniqueName(this.destinationPath + "/" + this.fileName);
                }
                this.file.PostedFile.SaveAs(this.destinationPath + NewFileName);
                return this.destinationPath + NewFileName;
            }
            else
            {
                return doSaveToDB(this.fileBinary);
            }
        }
        /// <summary>
        /// Specifies what kind of connection is being used to connect to database.
        /// Values are ConnectionType  Sql,OleDb,ODBC
        /// Default is ConnectionType.Sql
        /// </summary>
        public F.Web.IO.Upload.ConnectionType ConnectionStringType
        {
            get { return this.connectiontype; }
            set
            {
                if (value.ToString().ToUpper() == "SQL")
                {
                    this.connectiontype = F.Web.IO.Upload.ConnectionType.Sql;
                }
                else if (value.ToString().ToUpper() == "OLEDB")
                {
                    this.connectiontype = F.Web.IO.Upload.ConnectionType.OleDb;
                }
                else if (value.ToString().ToUpper() == "ODBC")
                {
                    this.connectiontype = F.Web.IO.Upload.ConnectionType.ODBC;
                }
                else
                {
                    this.connectiontype = value;
                }
            }
        }
        public enum ConnectionType
        {
            Sql,
            OleDb,
            ODBC
        }
        /// <summary>
        /// this function build a SQLquery getting DB FieldName and Value 
        /// from the hashtable DBFields(key, value)
        /// </summary>
        /// <param name="buffer"></param>
        private string doSaveToDB(byte[] buffer)
        {
            string nFileID = "";
            try
            {
                //connect and retrieve table structure
                string sql = String.Format("SELECT * TOP 1 FROM {0}", this.DBTable);
                DataSet dbSet = new DataSet();
                DataRow dbRow;
                int total;
                switch (this.ConnectionStringType)
                {
                    case F.Web.IO.Upload.ConnectionType.Sql:
                        SqlConnection dbConn = new SqlConnection(this.ConnectionString);
                        SqlDataAdapter dbAdapt = new SqlDataAdapter(sql, dbConn);
                        dbAdapt.AcceptChangesDuringFill = true;
                        dbAdapt.MissingSchemaAction = MissingSchemaAction.AddWithKey;
                        SqlCommandBuilder cmd = new SqlCommandBuilder(dbAdapt);
                        dbConn.Open();
                        dbAdapt.Fill(dbSet, this.DBTable);
                        dbRow = dbSet.Tables[this.DBTable].NewRow();
                        total = dbSet.Tables[0].Rows.Count;
                        foreach (DictionaryEntry item in this.DBFields)
                        {
                            dbRow[item.Key.ToString()] = item.Value;
                        }
                        dbSet.Tables[this.DBTable].Rows.Add(dbRow);
                        dbAdapt.InsertCommand = cmd.GetInsertCommand();
                        dbAdapt.Update(dbSet, this.DBTable);
                        dbAdapt = new SqlDataAdapter(String.Format("SELECT @@IDENTITY", this.DBTable), dbConn);
                        cmd = new SqlCommandBuilder(dbAdapt);
                        dbSet = new DataSet();
                        dbAdapt.Fill(dbSet, this.DBTable);
                        if (dbSet.Tables[0].Rows.Count >= 1)
                        {
                            nFileID = dbSet.Tables[0].Rows[0][0].ToString();
                        }
                        dbConn.Close();
                        break;
                    case F.Web.IO.Upload.ConnectionType.OleDb:
                        System.Data.OleDb.OleDbConnection dbConn2 = new System.Data.OleDb.OleDbConnection(this.ConnectionString);
                        System.Data.OleDb.OleDbDataAdapter dbAdapt2 = new System.Data.OleDb.OleDbDataAdapter(sql, dbConn2);
                        dbAdapt2.AcceptChangesDuringFill = true;
                        dbAdapt2.MissingSchemaAction = MissingSchemaAction.AddWithKey;
                        System.Data.OleDb.OleDbCommandBuilder cmd2 = new System.Data.OleDb.OleDbCommandBuilder(dbAdapt2);
                        dbConn2.Open();
                        dbAdapt2.Fill(dbSet, this.DBTable);
                        dbRow = dbSet.Tables[this.DBTable].NewRow();
                        total = dbSet.Tables[0].Rows.Count;
                        foreach (DictionaryEntry item in this.DBFields)
                        {
                            dbRow[item.Key.ToString()] = item.Value;
                        }
                        dbSet.Tables[this.DBTable].Rows.Add(dbRow);
                        dbAdapt2.InsertCommand = cmd2.GetInsertCommand();
                        dbAdapt2.Update(dbSet, this.DBTable);
                        dbAdapt2 = new System.Data.OleDb.OleDbDataAdapter(String.Format("SELECT @@IDENTITY", this.DBTable), dbConn2);
                        cmd2 = new System.Data.OleDb.OleDbCommandBuilder(dbAdapt2);
                        dbSet = new DataSet();
                        dbAdapt2.Fill(dbSet, this.DBTable);
                        if (dbSet.Tables[0].Rows.Count >= 1)
                        {
                            nFileID = dbSet.Tables[0].Rows[0][0].ToString();
                        }
                        dbConn2.Close();
                        break;
                    case F.Web.IO.Upload.ConnectionType.ODBC:
                        System.Data.Odbc.OdbcConnection dbConn3 = new System.Data.Odbc.OdbcConnection(this.ConnectionString);
                        System.Data.Odbc.OdbcDataAdapter dbAdapt3 = new System.Data.Odbc.OdbcDataAdapter(sql, dbConn3);
                        dbAdapt3.AcceptChangesDuringFill = true;
                        dbAdapt3.MissingSchemaAction = MissingSchemaAction.AddWithKey;
                        System.Data.Odbc.OdbcCommandBuilder cmd3 = new System.Data.Odbc.OdbcCommandBuilder(dbAdapt3);
                        dbConn3.Open();
                        dbAdapt3.Fill(dbSet, this.DBTable);
                        dbRow = dbSet.Tables[this.DBTable].NewRow();
                        total = dbSet.Tables[0].Rows.Count;
                        foreach (DictionaryEntry item in this.DBFields)
                        {
                            dbRow[item.Key.ToString()] = item.Value;
                        }
                        dbSet.Tables[this.DBTable].Rows.Add(dbRow);
                        dbAdapt3.InsertCommand = cmd3.GetInsertCommand();
                        dbAdapt3.Update(dbSet, this.DBTable);
                        dbAdapt3 = new System.Data.Odbc.OdbcDataAdapter(String.Format("SELECT @@IDENTITY", this.DBTable), dbConn3);
                        cmd3 = new System.Data.Odbc.OdbcCommandBuilder(dbAdapt3);
                        dbSet = new DataSet();
                        dbAdapt3.Fill(dbSet, this.DBTable);
                        if (dbSet.Tables[0].Rows.Count >= 1)
                        {
                            nFileID = dbSet.Tables[0].Rows[0][0].ToString();
                        }
                        dbConn3.Close();
                        break;
                }
            }
            catch (Exception x)
            {
                nFileID = x.ToString();
            }
            return nFileID;
        }
        /// <summary>
        /// (boolean) Returns false if the Uploaded File extension is
        /// not allowed as specified in allowedExtensions. Returns true otherwise.
        /// </summary>
        /// <returns></returns>
        private bool checkAllowedExtensions()
        {
            foreach (string s in this.allowedExtensions.Split(new char[] { ',' }))
            {
                if (this.fileExtension == s)
                    return true;
            }
            return false;
        }
        /// <summary>
        /// (boolean) Checks if the specified file to upload is of type image, by
        /// checking its Content Type. Return false if not an image.
        /// </summary>
        /// <returns></returns>
        private bool checkFileIsImage()
        {
            bool ret;
            switch (this.fileContentType)
            {
                case "image/gif":
                case "image/jpeg":
                case "image/x-ms-bmp":
                case "image/x-png":
                    ret = true;
                    break;
                default:
                    ret = false;
                    break;
            }
            return ret;
        }
        /// <summary>
        /// (string) Specifies which form field should WebTools.Upload use
        /// to work with. Sets fileName, fileExtension, fileContentType and 
        /// fileSize values.
        /// </summary>                 
        /// <param name="file"></param>             
        public void getFileFromHTMLInputFile(System.Web.UI.HtmlControls.HtmlInputFile formfieldName)
        {
            this.file = formfieldName;
            this.fileName = Path.GetFileName(file.PostedFile.FileName);
            this.fileExtension = Path.GetExtension(file.PostedFile.FileName).Substring(1);
            this.filecontenttype = file.PostedFile.ContentType;
            this.filesize = file.PostedFile.ContentLength;
            this.filebinary = new byte[this.fileSize];
            this.file.PostedFile.InputStream.Read(this.fileBinary, 0, this.fileSize);
        }
        public bool createDirectory(string path)
        {
            DirectoryInfo dir = new DirectoryInfo(path);
            if (!dir.Exists)
            {
                if (this.autoDirectoryCreation)
                {
                    dir.Create();
                    return true;
                }
                else
                {
                    return false;
                }
            }
            return true;
        }
        /// <summary>
        /// Specifies that the file will be saved to a directory
        /// </summary>
        public void SaveToDirectory()
        {
            this.saveTo = SaveTo.Directory;
        }
        /// <summary>
        /// Specifies that the file will be saved to database
        /// </summary>
        public void SaveToDataBase()
        {
            this.saveTo = SaveTo.Database;
        }
        /// <summary>
        /// Returns the "next filename" related to the specified filename.
        /// </summary>
        /// <param name="filename"></param>
        /// <returns></returns>
        private string GetUniqueName(string filename)
        {
            string temp = filename;
            for (int x = 1; System.IO.File.Exists(temp); x++)
                temp = filename.Substring(0, filename.LastIndexOf(".")) + x + filename.Substring(filename.LastIndexOf("."));
            return new System.IO.FileInfo(temp).Name;
        }
        #endregion
    }
}
