using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; namespace WebBlocks { public class FileUploadControl : System.Web.UI.WebControls.CompositeControl { protected System.Web.UI.WebControls.TextBox filename; protected System.Web.UI.WebControls.Button btnRemove; protected System.Web.UI.WebControls.FileUpload fileUpload; public event EventHandler FileUploaded; public string Directory { get { return (ViewState[this.ID + "Directory"] == null ? "" : (string)ViewState[this.ID + "Directory"]); } set { ViewState[this.ID + "Directory"] = value; } } public string Filename { get { return (ViewState[this.ID + "Filename"] == null ? "" : (string)ViewState[this.ID + "Filename"]); } set { ViewState[this.ID + "Filename"] = value; } } public bool AutoPostback { get { return (ViewState["AutoPostback"] == null ? true : (bool)ViewState["AutoPostback"]); } set { ViewState["AutoPostback"] = value; } } public long FileSize { get { if (Filename.Length > 0) return fileUpload.PostedFile.ContentLength; else return 0; } } protected override void OnInit(EventArgs e) { if (Directory == null) Directory = "/Resources/"; fileUpload = new FileUpload(); if (AutoPostback) fileUpload.Attributes["onChange"] = "doUpload()"; if (CssClass.Length > 0) fileUpload.Attributes.Add("class", CssClass); fileUpload.Visible = true; filename = new TextBox(); filename.CssClass = CssClass; filename.Visible = false; filename.ReadOnly = true; btnRemove = new Button(); btnRemove.Text = "Remove"; btnRemove.CssClass = CssClass; btnRemove.Click +=new EventHandler(btnRemove_Click); btnRemove.Visible = false; this.Load +=new EventHandler(FileUploadControl_Load); base.OnInit (e); } protected override void CreateChildControls() { Literal li = new Literal(); li.Text = "
"; Controls.Add(li); Controls.Add(filename); Controls.Add(btnRemove); Controls.Add(fileUpload); base.CreateChildControls (); } private string doFileUpload() { // directory management if (!System.IO.Directory.Exists(Page.Server.MapPath(Directory))) { System.IO.Directory.CreateDirectory(Page.Server.MapPath(Directory)); } // file management string filename = fileUpload.PostedFile.FileName; if (filename.IndexOf("\\") > -1) { // strip out directory information -- firefox sometimes includes it filename = filename.Substring(filename.LastIndexOf("\\")+1); } // check if the file exists while (System.IO.File.Exists(Page.Server.MapPath(Directory) + filename)) { // add a random var to the beginning Random r = new Random(); filename = "[" + r.Next(999).ToString() + "]" + filename; } fileUpload.PostedFile.SaveAs(Page.Server.MapPath(Directory) + filename); Page.Trace.Write("Saved to: " + Page.Server.MapPath(Directory) + filename); return filename; } private string getDatabaseFilename() { return "stuff"; } private void btnRemove_Click(object sender, EventArgs e) { if (System.IO.File.Exists(Page.Server.MapPath(Directory) + Filename)) { System.IO.File.Delete(Page.Server.MapPath(Directory) + Filename); } Filename = null; filename.Text = ""; filename.Visible = false; btnRemove.Visible = false; fileUpload.Visible = true; } private void FileUploadControl_Load(object sender, EventArgs e) { EnsureChildControls(); Page.Trace.Write("Dir: " + this.Directory); if (fileUpload.PostedFile != null && fileUpload.PostedFile.FileName.Length > 0) { // upload the file filename.ReadOnly = false; Filename = doFileUpload(); filename.Text = Filename; filename.ReadOnly = true; if (FileUploaded != null) FileUploaded(sender, e); Page.Trace.Write("Uploaded file " + fileUpload.PostedFile.FileName); } if (Filename.Length > 0) { filename.Text = Filename; filename.Visible = true; btnRemove.Visible = true; fileUpload.Visible = false; } } } }