Click here to Skip to main content
15,886,873 members
Articles / Web Development / ASP.NET

Asynchronous File Upload

Rate me:
Please Sign up or sign in to vote.
4.96/5 (26 votes)
13 Jun 2014CPOL12 min read 126.9K   5K   103  
An Ajax control that enables a user to upload a file asynchronously with extra data
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Web.Script.Services;
using System.Web.Services;
using MyControls.Web;

public partial class CrossPostBack_GallerySavePage : System.Web.UI.Page
{
    private MyControls.Web.AjaxUploadGalleryExtender AjaxUploadGalleryExtender1;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (this.PreviousPage != null)
        {
            AjaxUploadGalleryExtender1 = (MyControls.Web.AjaxUploadGalleryExtender)this.PreviousPage.Master.FindControl("ContentPlaceHolder1").FindControl("AjaxUploadGalleryExtender1");
            Control postbackcontrol = MyControls.Web.Util.GetPostBackControl(this.Request, this.PreviousPage);
            string eventArgument = MyControls.Web.Util.GetPostBackArgment(this.Request);

            if (postbackcontrol == AjaxUploadGalleryExtender1)
            {
                switch (eventArgument[0])
                {
                    case 'P':
                        AjaxUploadFileEventArgs evt = new AjaxUploadFileEventArgs();
                        evt.FileIndex = int.Parse(eventArgument.Remove(0, 2));
                        evt.File = AjaxUploadGalleryExtender1.NewUplaodFile(Request.Files[AjaxUploadGalleryExtender1.UniqueID + "$file" + evt.FileIndex]);

                        AjaxUploadGalleryExtender1_Preview(AjaxUploadGalleryExtender1, evt);
                        break;
                    case 'S':
                        AjaxUploadGalleryExtender1_Submit(AjaxUploadGalleryExtender1, EventArgs.Empty);
                        break;

                }
            }
        }
    }
    [WebMethod(EnableSession = true), ScriptMethod]
    public static MyControls.Web.ProgressInfo GetProgressValue(string contextKey)
    {
        MyControls.Web.ProgressInfo info = MyControls.Web.AjaxUploadExtender.GetUploadInfo(contextKey);
        return info;
    }
    protected void AjaxUploadGalleryExtender1_Submit(object sender, EventArgs e)
    {
        int submitResult = 0;

        int galleryID = int.Parse(AjaxUploadGalleryExtender1.GetValue("gId"));
        string gallaryName = AjaxUploadGalleryExtender1.GetValue("name");

        string PictureName = "";
        try
        {
            string[] ImageNames = new string[AjaxUploadGalleryExtender1.Files.Count];
            for(int i = 0; i < AjaxUploadGalleryExtender1.Files.Count; i++)
            {
                MyControls.Web.AjaxUploadFile file = AjaxUploadGalleryExtender1.Files[i];
                string Title = file.GetValue("title");
                if(file.HasFile)
                    ImageNames[i] = SaveImage(file);
            }
            try
            {
                if (galleryID == -1)
                    galleryID = AddNewGallery(gallaryName,ImageNames);
                else
                    UpdateGallery(galleryID, gallaryName, ImageNames);
            }
            catch (Exception)
            {
                submitResult = 2;
            }

        }
        catch (Exception)
        {
            submitResult = 1;
        }

        Response.ClearContent();
        Response.ContentType = "text/plain";

        string responsevalue = string.Empty;
        responsevalue = string.Format("{{\"submitResult\":{0},\"galleryID\":{1}}}", submitResult, galleryID);
        Response.Write(responsevalue);
        Response.End();
    }

    private void UpdateGallery(int galleryID, string gallaryName, string[] ImageNames)
    {
        if (AjaxUploadGalleryExtender1.GetValue("except") == "data")
            throw new Exception();

        // call the database.

        for (int i = 0; i <= 100; i++)
        {
            MyControls.Web.ProgressInfo prog = AjaxUploadGalleryExtender1.ProgressInfo;
            prog.Message = string.Format("Updating Gallery no. {0}.. ", galleryID);
            prog.Value = i;

            System.Threading.Thread.Sleep(20);
        }
    }

    private int AddNewGallery(string gallaryName, string[] ImageNames)
    {
        if (AjaxUploadGalleryExtender1.GetValue("except") == "data")
            throw new Exception();

        // call the database.
        for (int i = 0; i <= 100; i++)
        {
            MyControls.Web.ProgressInfo prog = AjaxUploadGalleryExtender1.ProgressInfo;
            prog.Message = "Adding new Gallery.. ";
            prog.Value = i;

            System.Threading.Thread.Sleep(20);
        }


        Random random = new Random();
        int galleryID = random.Next(1, 100);

        return galleryID;
    }

    private string SaveImage(AjaxUploadFile file)
    {
        string filename = System.IO.Path.GetFileNameWithoutExtension(file.FileName);
        string extention = System.IO.Path.GetExtension(file.FileName);
        int index = 0;
        string savename = filename + extention;
        while (System.IO.File.Exists(Server.MapPath("~/UploadedImages/") + savename))
        {
            savename = string.Format("{0} ({1}){2}", filename, index, extention);
            index++;
        }
        file.SaveAs(Server.MapPath("~/UploadedImages/") + savename);

        return savename;
    }

    protected void AjaxUploadGalleryExtender1_Preview(object sender, MyControls.Web.AjaxUploadFileEventArgs e)
    {
        if (e.File.HasFile)
        {
            HttpPostedFile userPostedFile = e.File.PostedFile;

            ContentType = userPostedFile.ContentType;
            if (ContentType.StartsWith("image"))
            {
                int framewidth = 240;
                int frameheight = 180;

                System.Drawing.Bitmap original = new System.Drawing.Bitmap(e.File.FileContent);
                int width = original.Width;
                int height = original.Height;

                int previewWidth = framewidth;
                int previewHeight = frameheight;
                if (width > height)
                {
                    previewWidth = framewidth;
                    previewHeight = (previewWidth * height) / width;
                }
                else if (height > width)
                {
                    previewHeight = frameheight;
                    previewWidth = (previewHeight * width) / height;
                }

                System.Drawing.Bitmap preview = new System.Drawing.Bitmap(original, previewWidth, previewHeight);
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                preview.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                ms.Seek(0, System.IO.SeekOrigin.Begin);

                byte[] buffer = new byte[ms.Length];
                ms.Read(buffer, 0, (int)ms.Length);

                for (int i = 0; i <= 100; i++)
                {
                    MyControls.Web.ProgressInfo prog = AjaxUploadGalleryExtender1.ProgressInfo;
                    prog.Message = "Generating Perview .. ";
                    prog.Value = i;

                    System.Threading.Thread.Sleep(20);
                }

                Response.ContentType = userPostedFile.ContentType;
                Response.BinaryWrite(buffer);
                Response.End();
            }
        }
    }

}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior) The first Ones
Jordan Jordan
-- Life is Good.
and you can make it better

Comments and Discussions