In my previous tutorials, I’d explained about get files list from directory, how to bind data to gridview, insert update delete gridview data using parameterized query, difference between executereader executenonquery and executescalar and other more cracking tutorials on Files, Asp.net, GridView, jQuery here.
Now here in this tutorial, I’ll explain how to upload the files from your local computer and save it to server folder and then download that files from server folder in asp.net using c# and vb.net with sample demo and example code.
There are lots of plug-ins are available in the market to upload files using jQuery and JavaScript. In that some plug-ins are free and some are premium. I’ll cover that in my later posts but here I’ll explain you how to upload files and save file full path to sql server table for download from gridview using asp.net fileupload control. We need to save path to sql server because later it will be required to get the uploaded files for the download.
To save the file details to sql server we need one table. To create table in your database use this script:
CREATE TABLE [dbo].[FileDetails] ( [FileId] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY, [FileName] [nvarchar](50) NULL, [FileSize] [nvarchar](50) NULL, [FileExtension] [nvarchar](20) NULL, [FilePath] [nvarchar](500) NULL )
After creating database table, check the following HTML Markup and Code-behind code snippets that I prepared for the demonstration.
HTML Markup [.aspx]
Following is the complete HTML Markup code for file upload control of .aspx page:
<html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1"> <title>Upload and Download files in Asp.net</title> </head> <body> <form id="form1" runat="server"> <div> <table> <tr> <td> <asp:FileUpload ID="fuFileUploader" runat="server" /> </td> <td> </td> <td> <asp:Button ID="btnUploadFiles" runat="server" Text="Upload Me!" OnClick="btnUploadMe_Click" /> </td> </tr> <tr> <td colspan="3"> </td> </tr> <tr> <td colspan="3"> <asp:GridView ID="gvUploadedFiles" runat="server" AutoGenerateColumns="false" DataKeyNames="FileId"> <HeaderStyle Font-Bold="true" BackColor="#ff6600" BorderColor="#f5f5f5" ForeColor="White" Height="30" /> <Columns> <asp:BoundField DataField="FileId" HeaderText="#" ControlStyle-Width="50" /> <asp:BoundField DataField="FileName" HeaderText="FileName" ControlStyle-Width="250" /> <asp:BoundField DataField="FileSize" HeaderText="FileSize" ControlStyle-Width="250" /> <asp:TemplateField> <ItemTemplate> <asp:LinkButton ID="lnkDownloadMe" runat="server" Text="Download Me!" OnClick="lnkDownloadMe_Click" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </td> </tr> <tr> <td colspan="3"> </td> </tr> <tr> <td> <asp:Label ID="lblMsg" runat="server" ForeColor="Red"></asp:Label> </td> </tr> </table> </div> </form> </body> </html>
After adding HTML Markup code in your .aspx page, check the below code-behind code in your project language.
File Upload And Download From Gridview Example – [C#]
First add the following namespace:
using System.Data.SqlClient; using System.IO;
Now add the below sample code snippet to perform upload and download files from server folder:
//specify your connection string here.. string strConn = "Data Source=datasource;Integrated Security=true;Initial Catalog=yourDB"; protected void Page_Load(object sender, EventArgs e) { lblMsg.Text = ""; if (!IsPostBack) { BindGridviewFileData(); } } //save file details to database as well as server folder protected void btnUploadMe_Click(object sender, EventArgs e) { try { if (fuFileUploader.PostedFile != null && fuFileUploader.PostedFile.ContentLength > 0) { string fileName = Path.GetFileName(fuFileUploader.PostedFile.FileName); string fileExtension = Path.GetExtension(fuFileUploader.PostedFile.FileName); //first check if "uploads" folder exist or not, if not create it string fileSavePath = Server.MapPath("uploads"); if (!Directory.Exists(fileSavePath)) Directory.CreateDirectory(fileSavePath); //after checking or creating folder it's time to save the file fileSavePath = fileSavePath + "//" + fileName; fuFileUploader.PostedFile.SaveAs(fileSavePath); FileInfo fileInfo = new FileInfo(fileSavePath); using (SqlConnection sqlConn = new SqlConnection(strConn)) { using (SqlCommand sqlCmd = new SqlCommand()) { sqlCmd.CommandText = @"INSERT INTO FileDetails (FileName,FileSize,FileExtension,FilePath) VALUES (@FileName,@FileSize,@FileExtension,@FilePath);"; sqlCmd.Parameters.AddWithValue("@FileName", fileName); sqlCmd.Parameters.AddWithValue("@FileSize", fileInfo.Length.ToString()); sqlCmd.Parameters.AddWithValue("@FileExtension", fileExtension); sqlCmd.Parameters.AddWithValue("@FilePath", fileSavePath); sqlCmd.Connection = sqlConn; sqlConn.Open(); sqlCmd.ExecuteNonQuery(); sqlConn.Close(); BindGridviewFileData(); } } lblMsg.Text = "File Uploaded Successfully!"; lblMsg.ForeColor = System.Drawing.Color.Green; } else { lblMsg.Text = "Error: Please select a file to upload!"; } } catch { lblMsg.Text = "Error: Error while uploading file!"; } } //download button to download files from gridview protected void lnkDownloadMe_Click(object sender, EventArgs e) { try { LinkButton lnkbtn = sender as LinkButton; GridViewRow gvrow = lnkbtn.NamingContainer as GridViewRow; int fileId = Convert.ToInt32(gvUploadedFiles.DataKeys[gvrow.RowIndex].Value.ToString()); using (SqlConnection sqlConn = new SqlConnection(strConn)) { using (SqlCommand sqlCmd = new SqlCommand()) { sqlCmd.CommandText = "SELECT * FROM FileDetails WHERE FileId=@FileId"; sqlCmd.Parameters.AddWithValue("@FileId", fileId); sqlCmd.Connection = sqlConn; sqlConn.Open(); SqlDataReader dr = sqlCmd.ExecuteReader(); if (dr.Read()) { string fileName = dr["FileName"].ToString(); string fileLength = dr["FileSize"].ToString(); string filePath = dr["FilePath"].ToString(); if (File.Exists(filePath)) { Response.Clear(); Response.BufferOutput = false; Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Length", fileLength); Response.AddHeader("content-disposition", "attachment; filename=" + fileName); Response.TransmitFile(filePath); Response.Flush(); } else { lblMsg.Text = "Error: File not found!"; } } } } } catch { lblMsg.Text = "Error: Error while downloading file!"; } } //bind file details to gridview private void BindGridviewFileData() { try { using (SqlConnection sqlConn = new SqlConnection(strConn)) { using (SqlCommand sqlCmd = new SqlCommand()) { sqlCmd.CommandText = "SELECT * FROM FileDetails"; sqlCmd.Connection = sqlConn; sqlConn.Open(); gvUploadedFiles.DataSource = sqlCmd.ExecuteReader(); gvUploadedFiles.DataBind(); sqlConn.Close(); } } } catch { } }
File Upload And Download From Gridview Example – [Vb.net]
First add the following namespace:
Imports System.Data.SqlClient Imports System.IO
Now add the below sample code snippet to perform upload and download files from server folder:
'specify your connection string here..' Dim strConn As String = "Data Source=datasource;Integrated Security=true;Initial Catalog=yourDB" Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load lblMsg.Text = "" If Not IsPostBack Then BindGridviewFileData() End If End Sub 'save file details to database as well as server folder' Protected Sub btnUploadMe_Click(ByVal sender As Object, ByVal e As EventArgs) Try If fuFileUploader.PostedFile IsNot Nothing Then Dim fileName As String = Path.GetFileName(fuFileUploader.PostedFile.FileName) Dim fileExtension As String = Path.GetExtension(fuFileUploader.PostedFile.FileName) 'first check if "uploads" folder exist or not, if not create it' Dim fileSavePath As String = Server.MapPath("uploads") If Not Directory.Exists(fileSavePath) Then Directory.CreateDirectory(fileSavePath) End If 'after checking or creating folder it's time to save the file' fileSavePath = fileSavePath & "//" & fileName fuFileUploader.PostedFile.SaveAs(fileSavePath) Dim fileInfo As New FileInfo(fileSavePath) Using sqlConn As New SqlConnection(strConn) Using sqlCmd As New SqlCommand() sqlCmd.CommandText = "INSERT INTO FileDetails" & ControlChars.CrLf & "(FileName,FileSize,FileExtension,FilePath) " & ControlChars.CrLf & "VALUES (@FileName,@FileSize,@FileExtension,@FilePath);" sqlCmd.Parameters.AddWithValue("@FileName", fileName) sqlCmd.Parameters.AddWithValue("@FileSize", fileInfo.Length.ToString()) sqlCmd.Parameters.AddWithValue("@FileExtension", fileExtension) sqlCmd.Parameters.AddWithValue("@FilePath", fileSavePath) sqlCmd.Connection = sqlConn sqlConn.Open() sqlCmd.ExecuteNonQuery() sqlConn.Close() BindGridviewFileData() End Using End Using lblMsg.Text = "File Uploaded Successfully!" lblMsg.ForeColor = System.Drawing.Color.Green Else lblMsg.Text = "Error: Please select a file to upload!" End If Catch lblMsg.Text = "Error: Error while uploading file!" End Try End Sub 'download button to download files from gridview' Protected Sub lnkDownloadMe_Click(ByVal sender As Object, ByVal e As EventArgs) Try Dim lnkbtn As LinkButton = TryCast(sender, LinkButton) Dim gvrow As GridViewRow = TryCast(lnkbtn.NamingContainer, GridViewRow) Dim fileId As Integer = Convert.ToInt32(gvUploadedFiles.DataKeys(gvrow.RowIndex).Value.ToString()) Using sqlConn As New SqlConnection(strConn) Using sqlCmd As New SqlCommand() sqlCmd.CommandText = "SELECT * FROM FileDetails WHERE FileId=@FileId" sqlCmd.Parameters.AddWithValue("@FileId", fileId) sqlCmd.Connection = sqlConn sqlConn.Open() Dim dr As SqlDataReader = sqlCmd.ExecuteReader() If dr.Read() Then Dim fileName As String = dr("FileName").ToString() Dim fileLength As String = dr("FileSize").ToString() Dim filePath As String = dr("FilePath").ToString() If File.Exists(filePath) Then Response.Clear() Response.BufferOutput = False Response.ContentType = "application/octet-stream" Response.AddHeader("Content-Length", fileLength) Response.AddHeader("content-disposition", "attachment; filename=" & fileName) Response.TransmitFile(filePath) Response.Flush() Else lblMsg.Text = "Error: File not found!" End If End If End Using End Using Catch lblMsg.Text = "Error: Error while downloading file!" End Try End Sub 'bind file details to gridview' Private Sub BindGridviewFileData() Try Using sqlConn As New SqlConnection(strConn) Using sqlCmd As New SqlCommand() sqlCmd.CommandText = "SELECT * FROM FileDetails" sqlCmd.Connection = sqlConn sqlConn.Open() gvUploadedFiles.DataSource = sqlCmd.ExecuteReader() gvUploadedFiles.DataBind() sqlConn.Close() End Using End Using Catch End Try End Sub
Example Result

Download Example
That’s it, this way you can upload file to server folder to download in asp.net using c# or vb.net.
Let me know if you’ve any questions or doubts about this tutorial by writing down your queries in comment below. I would be happy to provide you my feedback as soon as possible.
Happy coding!