File Uploading using XML


Description

This application is in ASP.NET which will allow you to upload images to an XML file which serves as the database for the uploaded files. You can retrieve these files along their properties from the xml file.

In this application I have made use of asp.net Web controls as well as Html controls. I have used a cascading stylesheet for formatting purpose. Xml file serves as a database for the uploaded files. The upload.aspx file is to upload the images to the database and show.aspx file is to retrieve the files from the database. Apart from this there is mystyle.css file which is a stylesheet and there is upload.xml file which stores all the uploaded files.

Code for upload.aspx:

<%@ Page Language="C#" EnableSessionState="False" %>

<%@ Import Namespace="System" %>

<%@ Import Namespace="System.IO" %>

<%@ Import Namespace="System.Data" %>

<%-- These are the imported namespaces needed to run the guest book --%>

<html>

<head>

    <title>Uploading Files.</title>

 

    <script language="C#" runat="server">

        //This method is called when the upload button is clicked

        public void Submit_Click(Object sender, EventArgs e)

        {

            //the path to the Xml file which will contain all the data

            string dataFile = "db/upload.xml";

            try

            {

                //proceed only if the file is posted

                if (file.PostedFile != null)

                {

                    errmess.Text = "";

                    //Open a FileStream to the Database in read mode

                    FileStream fin;

                    fin = new FileStream(Server.MapPath(dataFile), FileMode.Open, FileAccess.Read,

                    FileShare.ReadWrite);

                    //Create a DataSet object

                    DataSet guestData = new DataSet();

                    //Read data from the Database

                    guestData.ReadXml(fin);

                    fin.Close();

                    //extract the filename from the full file path

                    string nam = file.PostedFile.FileName;

                    int i = nam.LastIndexOf("\\");

                    string newnm = nam.Substring(i);

                    //Create a new DataRow from the DataSet Schema

                    DataRow newRow = guestData.Tables[0].NewRow();

                    //Fill the DataRow with form values

                    newRow["title"] = title.Text;

                    newRow["file"] = file.PostedFile.FileName;

                    newRow["length"] = file.PostedFile.ContentLength.ToString();

                    newRow["contenttype"] = file.PostedFile.ContentType;

                    //Add the row to the DataSet

                    guestData.Tables[0].Rows.Add(newRow);

                    //Create another filestream to the DataBase file in write mode

                    FileStream fout;

                    fout = new FileStream(Server.MapPath(dataFile), FileMode.Open, FileAccess.Write,

                    FileShare.ReadWrite);

                    guestData.WriteXml(fout, XmlWriteMode.WriteSchema);

                    fout.Close();

                    //Hide the Form Panel

                    formPanel.Visible = false;

                    //Display the view Panel

                    thankPanel.Visible = true;

                }

            }

            catch (Exception edd)

            {

                //catch any other exception that occur

                errmess.Text = "Cannot write to XML file because " + edd.ToString();

 

            }

        }

    </script>

 

</head>

<link href="mystyle.css" type="text/css" rel="stylesheet">

<body topmargin="0" leftmargin="0" rightmargin="0" marginwidth="0" marginheight="0">

    <%-- Include a header file 'header.inc' --%>

    <!-- #Include File="header.inc" -->

    <asp:Label ID="errmess" Text="" Style="color: #FF0000" runat="server" />

    <asp:Panel ID="formPanel" runat="server">

        <form id="Form1" runat="server" enctype="multipart/form-data" action="upload.aspx">

            <table border="0" width="80%" align="Center">

                <tr class="rowstyle">

                    <td>

                        Title :</td>

                    <td>

                        <asp:TextBox class="textstyle" Text="" ID="title" runat="server" />

                        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="title"

                            Display="static" runat="server">*</asp:RequiredFieldValidator></td>

                </tr>

                <tr class="rowstyle">

                    <td>

                        File :</td>

                    <td>

                        <input type="file" class="textstyle" text="" id="file" runat="server" />

                        <asp:RequiredFieldValidator ID="RequiredFieldValidator2" ControlToValidate="file"

                            Display="static" runat="server">*</asp:RequiredFieldValidator></td>

                </tr>

                <tr class="rowstyle">

                    <td colspan="2">

                        <asp:Button class="buttonstyle" ID="write" Text="Upload" OnClick="Submit_Click"

                          runat="server" /></td>

                </tr>

            </table>

        </form>

    </asp:Panel>

    <asp:Panel ID="thankPanel" Visible="false" runat="server">

        <p class="messagestyle" align="center">

            <b>Your file has been uploaded!</b><br>

        </p>

        <p align="center">

            <a href="show.aspx">Click here </a>to view Uploaded files.</p>

    </asp:Panel>

</body>
</html>

Code for show.aspx:

<%@ Page Language="C#" %>

<%@ Import Namespace="System" %>

<%@ Import Namespace="System.IO" %>

<%@ Import Namespace="System.Data" %>

<%-- Needed Assembiles --%>

<html>

<head>

    <title>Uploading files</title>

 

    <script language="C#" runat="server">

        //run the script when the Page is Loaded

        public void Page_Load(Object sender, EventArgs e)

        {

            //the path to the Xml file which will contain all the data

            string datafile = "db/upload.xml";

            try

            {

                //create a DataSet object

                DataSet guestData = new DataSet();

                //Open a FileStream to the Database

                FileStream fin;

                fin = new FileStream(Server.MapPath(datafile), FileMode.Open, FileAccess.Read,

                FileShare.ReadWrite);

                //Read the Database into the DataSet

                guestData.ReadXml(fin);

                fin.Close();

                //Databind the first table in the Dataset to the Repeater

                MyDataList.DataSource = guestData.Tables[0].DefaultView;

                MyDataList.DataBind();

            }

            catch (Exception ex)

            {

                //catch any other exceptions that occur

                errmess.Text = "Cannot read from XML file because " + ex.ToString();

            }

        }

    </script>

 

    <link href="mystyle.css" type="text/css" rel="stylesheet">

</head>

<body topmargin="0" leftmargin="0" marginwidth="0" marginheight="0" rightmargin="0">

    <!-- #Include File="header.inc" -->

    <asp:Label ID="errmess" Text="" Style="color: #FF0000" runat="server" />

    <br>

    <asp:Repeater ID="MyDataList" runat="server">

        <HeaderTemplate>

            <table width="100%" style="font: 8pt verdana" align="center">

                <tr style="background-color: tan">

                    <th>

                        Title</th>

                    <th>

                        File</th>

                    <th>

                        Length(In Bytes)</th>

                    <th>

                        Content Type</th>

                </tr>

        </HeaderTemplate>

        <ItemTemplate>

            <tr style="background-color: beige">

                <td>

                    <%# DataBinder.Eval(Container.DataItem, "title") %>

                </td>

                <td>

                    <%# DataBinder.Eval(Container.DataItem, "file") %>

                </td>

                <td>

                    <%# DataBinder.Eval(Container.DataItem, "length") %>

                </td>

                <td>

                    <%# DataBinder.Eval(Container.DataItem, "contenttype") %>

                </td>

            </tr>

        </ItemTemplate>

        <FooterTemplate>

            </table>

        </FooterTemplate>

    </asp:Repeater>

</body>
</html>