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 AdminControls { 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 bool AutoUpload { get { return (ViewState["AutoUpload"] == null ? true : (bool)ViewState["AutoUpload"]); } set { ViewState["AutoUpload"] = value; } } 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["Filename"] == null ? "" : (string)ViewState["Filename"]); } set { ViewState["Filename"] = value; CheckFilename(); } } 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 (AutoUpload) 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() { if (AutoUpload) { 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(this, null); CheckFilename(); } } private void CheckFilename() { if (Filename.Length > 0) { filename.Text = Filename; filename.Visible = true; btnRemove.Visible = true; fileUpload.Visible = false; } else { filename.Visible = false; btnRemove.Visible = false; fileUpload.Visible = true; } } } }