Tuesday, 23 April 2013

Uploading and Downloading Word Files From Database Using ASP.NET C#

Background
Now, recently I am focusing on files related articles due to their relevance to file related operations. Now in this article I will explain how to upload Word files into a database and how to download those files from the database. This type of requirement can exist in any project such as how to upload only a .doc or .docx file resume, so because of the above requirement I have decide to write this article.

Now before creating the application, let us create a table named WordFiles in a database to store the uploaded Word files in a database table having the following fields (shown in the following image):
Wordtable.png

In the preceding table I have created four columns, they are id for the unique identity, Name for the Word  file name, type for file type and data to store the actual content of the files with a binary datatype because the content of the files are stored in bytes.

I hope you have created the same type of table.

Now  let us start to create an application to upload and download Word files step-by-step.
Now create the project  as:
  1. "Start" - "All Programs" - "Microsoft Visual Studio 2010".
  2. "File" - "New Project" - "C#" - "Empty Project" (to avoid adding a master page).
  3. Give the Project   name such as  WordFileUploadDownload  or another as you wish and specify the location.
  4. Then right-click on Solution Explorer - "Add New Item" - Default.aspx page. 
  5. One File upload control, two Buttons, one label and a grid view.
Then the  <form> section of the Default aspx page looks as in the following:

 <form id="form1" runat="server">
    <div>  
   <table>
    <tr>
    <td> 
        Select File
        </td>
        <td>
        <asp:FileUpload ID="FileUpload1" runat="server" ToolTip="Select Only word File" />
        </td>
        <td> 
        <asp:Button ID="Button1" runat="server" Text="Upload" onclick="Button1_Click" />
        </td>
        <td> 
            <asp:Button ID="Button2" runat="server" Text="View Files" 
                onclick="Button2_Click" />
               </td>
        </tr> 
</table>
<table><tr><td><p><asp:Label ID="Label2" runat="server" Text="label"></asp:Label>  </p></td></tr></table>

<asp:GridView ID="GridView1" runat="server" Caption="Excel Files " 
        CaptionAlign="Top" HorizontalAlign="Justify" 
         DataKeyNames="id" onselectedindexchanged="GridView1_SelectedIndexChanged" 
        ToolTip="Word FIle DownLoad Tool" CellPadding="4" ForeColor="#333333" 
        GridLines="None">
        <RowStyle BackColor="#E3EAEB" />
        <Columns>
            <asp:CommandField ShowSelectButton="True" SelectText="Download" ControlStyle-ForeColor="Blue"/>
        </Columns>
        <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
        <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
        <HeaderStyle BackColor="Gray" Font-Bold="True" ForeColor="White" />
        <EditRowStyle BackColor="#7C6F57" />
        <AlternatingRowStyle BackColor="White" />
    </asp:GridView> 
    </div>
 </form>

Now switch to design mode and double-click on the upload button and use the following code to upload and validate that only PDF files are allowed to be uploaded.

protected void Button1_Click(object sender, EventArgs e)
    {
        Label2.Visible = true;
        string filePath = FileUpload1.PostedFile.FileName;          // getting the file path of uploaded file
        string filename1 = Path.GetFileName(filePath);               // getting the file name of uploaded file
        string ext = Path.GetExtension(filename1);                      // getting the file extension of uploaded file
        string type = String.Empty;

 if (!FileUpload1.HasFile)
        {
            Label2.Text = "Please Select File";                          //if file uploader has no file selected
        }
        else
        if (FileUpload1.HasFile)
        {
            try
            {
                                                     
                switch (ext)                                         
// this switch code validate the files which allow to upload only PDF  file 
                {
                    case ".doc"
                        type = "application/word"
                        break;    
                     case ".docx"
                        type = "application/word"
                        break;               
                 
                }
 
                if (type != String.Empty)
                { 
                   connection();
                    Stream fs = FileUpload1.PostedFile.InputStream;
                    BinaryReader br = new BinaryReader(fs);                                 //reads the   binary files
                    Byte[] bytes = br.ReadBytes((Int32)fs.Length);                           //counting the file length into bytes
                    query = "insert into wordFiles (Name,type,data)" + " values (@Name, @type, @Data)";   //insert query
                    com = new SqlCommand(query, con);
                    com.Parameters.Add("@Name", SqlDbType.VarChar).Value = filename1;
                    com.Parameters.Add("@type", SqlDbType.VarChar).Value = type;
                    com.Parameters.Add("@Data", SqlDbType.Binary).Value = bytes;
                    com.ExecuteNonQuery();
                    Label2.ForeColor = System.Drawing.Color.Green;
                    Label2.Text = " Word File Uploaded Successfully"
                }
                else
                {
                    Label2.ForeColor = System.Drawing.Color.Red; 
                    Label2.Text = "Select Only word Files  ";                              // if file is other than speified extension 
                }
            }
            catch (Exception ex)
            {
                Label2.Text = "Error: " + ex.Message.ToString(); 
            } 
        }
    }


Add the following code in the view file button click to View uploaded PDF files in GridView

protected void Button2_Click(object sender, EventArgs e)
    {
        connection();
        query = "Select *from WordFiles";
        SqlDataAdapter da = new SqlDataAdapter(query, con);
        DataSet ds = new DataSet();
        da.Fill(ds);
        GridView1.DataSource = ds;
        GridView1.DataBind();
        con.Close();

    }
Add the following code to the Gridview selected index changed event to download the files:

    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {
             connection();
            SqlCommand com =new SqlCommand("select Name,type,data from  WordFiles where id=@id", con);
            com.Parameters.AddWithValue("id", GridView1.SelectedRow.Cells[1].Text);
            SqlDataReader dr = com.ExecuteReader();

 
            if (dr.Read())
            {
                Response.Clear();
                Response.Buffer =true;
                Response.ContentType = dr["type"].ToString();
                Response.AddHeader("content-disposition", "attachment;filename=" + dr["Name"].ToString());     // to open file prompt Box open or Save file         
                Response.Charset = "";
                Response.Cache.SetCacheability(HttpCacheability.NoCache);
                Response.BinaryWrite((byte[])dr["data"]);
                Response.End();
            }

}

Then run the page which will look as in the following:

demoscreen.png


From the above view I am using two buttons to do the upload; one to upload the selected files to the database and view files which shows the files in a grid view which is stored in a database table.

Now run the application and select a file that is not a Word file and the result will be the error as shown in the following:
Invalidfiles.png

Now select the Word file, which shows the following message after being successfully uploaded:

uploaded.png

Now click on view files details. The gridview shows the uploaded files with details as shown below. 

viewfiles.png

Now click on the download button of the gridview, the following prompt message is displayed as shown in the following image:

finaloutput.png

Then choose browse with MicroSoft Word and click on the "Ok" button. Then the file will be opened in Word format.

Summary

I hope this article is useful for all readers, if you have any suggestion then please contact me including beginners also.

No comments:

Post a Comment