دانلود فایل از GridView در ASP.Net

در این مقاله بررسی خواهیم کرد که چگونه در ASP.Net از یک GridView، بتوانیم یک فایل را دانلود و آپلود کنیم.

دانلود فایل از GridView  در ASP.Net

مواردی که در این مقاله شرح داده می شوند شامل موارد زیر می باشد:

آپلود فایل با استفاده از upload control

ذخیره یک فایل در یک پوشه در بانک اطلاعاتی

نمایش لیست فایل های دانلود شده در یک GridView 

دانلود فایل با کلیک بر روی LinkButton

برای ایجاد این برنامه، مراحل زیر را انجام می دهیم.

بانک اطلاعاتی

ما از جدول و پروسیجر(procedure) زیر برای نشان دادن این مفهوم استفاده می کنیم.

با استفاده از کدهای زیر، جدولمان را می سازیم.

CREATE table FileDetails  
(  
   FileId int Primary Key Identity(1,1),  
   FileName nvarchar(100),  
   FileSize nvarchar(30),  
   FileType nvarchar(30),  
   FilePath nvarchar(200),  
   CreatedOn Datetime  
)  
  
Use the following script to Create the Stored procedures  
--To get all File Details  
CREATE procedure USP_Select_FileDetails  
AS  
Begin    
 Select * from FileDetails  
END  
  
--To Insert File Details  
CREATE procedure USP_Insert_FileDetails  
   @FileName nvarchar(100),  
   @FileSize nvarchar(30),  
   @FileType nvarchar(30),  
   @FilePath nvarchar(200),  
   @CreatedOn Datetime = Null  
AS  
Begin    
 Insert FileDetails(FileName,FileSize,FileType,FilePath,CreatedOn)   
 Values(@FileName,@FileSize,@FileType,@FilePath,GetDate())  
END 

جدول ما به این شکل خواهد شد.

لازم به ذکر است، برای کسانی که زمان ایجاد بانک اطلاعاتی را ندارند، فایل اجرایی آن در فایل ضمیمه قرار داده شده است.

ساخت پروژه

اکنون به روش زیر پروژه را ایجاد می کنیم.

Visual Studio را باز کرده و مانند تصویر زیر یک پروژه جدید ایجاد کنید.

 

نام و محل ذخیره سازی پروژه را مشخص کنید.

Web.Config

connection string را در فایل Web.Config  مانند قطعه کد زیر ایجاد کنید.

<connectionStrings>  
   <add name="conStr"  
      connectionString="Password= 123; User ID=sa; Database=DUF; Data Source=."  
      providerName="System.Data.SqlClient"/>  
</connectionStrings>

 روی Solution Explorer راست کلیک کرده و add a web form را انتخاب کنید.

مانند قطعه کد هایی که زیر مشاهده می کنید، صفحه aspx. خود را طراحی کنید.

 <div align="center" style="width: 100%;">  
    <fieldset style="width: 30%;">  
        <legend>دانلود فایل توسط گرید ویو (GridView)</legend>  
        <table width="100%">  
            <tr>  
                <td align="left">  
                    <asp:FileUpload ID="FileUpload1" runat="server" />  
                </td>  
                <td align="left">  
                    <asp:Button ID="btnUpload" runat="server" Text="Upload" OnClick="btnUpload_Click" />  
                </td>  
            </tr>  
            <tr>  
                <td colspan="2" align="center">  
                    <br />  
                    <asp:Label ID="lblMsg" runat="server" ></asp:Label>  
                </td>  
                <tr>  
                    <td colspan="2" align="center">  
                        <br />  
                        <asp:GridView ID="gvFiles" runat="server" AutoGenerateColumns="False" Width="100%"  
                            OnRowCommand="gvFiles_RowCommand">  
                            <Columns>  
                                <asp:TemplateField HeaderText="لینک دانلود">  
                                    <ItemTemplate>  
                                        <asp:LinkButton ID="lnkDownload" runat="server" CausesValidation="False" CommandArgument='<%# Eval("FileName") %>'  
                                            CommandName="Download" Text='<%# Eval("FileName") %>' />  
                                    </ItemTemplate>  
                                </asp:TemplateField>  
                                <asp:BoundField DataField="FileSize" HeaderText="حجم فایل" />  
                                <asp:BoundField DataField="FileType" HeaderText="نوع فایل" />  
                            </Columns>  
                        </asp:GridView>  
                    </td>  
                </tr>  
        </table>  
    </fieldset>  
</div> 
            <div align="center">
        <a href="http://www.barnamenevisan.org">مرجع تخصصی برنامه نویسان</a>
             </div>

 

CodeBehind

namespaceهای زیر را به پروژه اضافه کنید.

using System.Data;  
using System.IO;  
using System.Data.SqlClient;  
using System.Configuration;  
using System.Drawing;

بصورتی در زیر آمده هاست، ConnectionString ساخته شده در فایل Web.Config را فراخوانی کنید.

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString); 

توابع تعریف شده برای برنامه

//Get file type by Extension  
private string GetFileExtension(string fileExtension)  
{  
    switch (fileExtension.ToLower())  
    {  
        case ".docx":  
        case ".doc":  
            return "Microsoft Word Document";  
        case ".xlsx":  
        case ".xls":  
            return "Microsoft Excel Document";  
        case ".txt":  
            return "Text Document";  
        case ".jpg":  
        case ".png":  
            return "Image";  
        default:  
            return "Unknown";  
    }  
}  
  
//Save File in folder and File details and Path to database  
private void UploadFile()  
{  
    string FileName = string.Empty;  
    string FileSize = string.Empty;  
    string extension = string.Empty;  
    string FilePath = string.Empty;  
  
    if (FileUpload1.HasFile)  
    {  
        extension = Path.GetExtension(FileUpload1.FileName);  
        FileName = FileUpload1.PostedFile.FileName;  
        FileSize = FileName.Length.ToString() + " Bytes";  
        //strFileName = DateTime.Now.ToString("yyyyMMddHHmmss") + FileUpload1.FileName;  
        FileUpload1.PostedFile.SaveAs(Server.MapPath(@"~/Application/FileUploads/" + FileName.Trim()));  
        FilePath = @"~/Application/FileUploads/" + FileName.Trim().ToString();  
    }  
    else  
    {  
        lblMsg.Text = "Plase upload the file";  
        lblMsg.ForeColor = Color.Red;  
        return;  
    }  
  
    SqlCommand cmd = new SqlCommand("USP_Insert_FileDetails", con);  
    cmd.CommandType = System.Data.CommandType.StoredProcedure;  
    cmd.Parameters.AddWithValue("@FileName", FileName);  
    cmd.Parameters.AddWithValue("@FileSize", FileSize);  
    cmd.Parameters.AddWithValue("@FileType", GetFileExtension(extension));  
    cmd.Parameters.AddWithValue("@FilePath", FilePath);  
    con.Open();  
    int result = cmd.ExecuteNonQuery();  
    if (result > 0)  
    {  
        lblMsg.Text = "File Uploaded Successfully ";  
        lblMsg.ForeColor = Color.Green;  
        BindGridView();  
    }  
}  
  
//Displaying the list of files in GridView that are already uploaded  
private void BindGridView()  
{  
    SqlDataAdapter adp = new SqlDataAdapter("USP_Select_FileDetails", con);  
    adp.SelectCommand.CommandType = System.Data.CommandType.StoredProcedure;  
    if (con.State != ConnectionState.Open)  
    {  
        con.Open();  
    }  
    DataSet ds = new DataSet();  
    adp.Fill(ds);  
    gvFiles.DataSource = ds;  
    gvFiles.DataBind();  
}

 Event Handlers

protected void Page_Load(object sender, EventArgs e)  
{  
    lblMsg.Text = string.Empty;  
    if (!Page.IsPostBack)  
    {  
        BindGridView();  
    }  
}  
  
protected void btnUpload_Click(object sender, EventArgs e)  
{  
    UploadFile();  
}  
  
protected void gvFiles_RowCommand(object sender, GridViewCommandEventArgs e)  
{  
    Response.Clear();  
    Response.ContentType = "application/octet-stream";  
    Response.AppendHeader("Content-Disposition", "filename=" + e.CommandArgument);  
    Response.TransmitFile(Server.MapPath("~/Application/FileUploads/") + e.CommandArgument);  
    Response.End();  
}

خروجی برنامه

می توانیم با استفاده از کنترل file upload و کلیک بر روی دکمه Upload فایل های خود را upload کنیم. فایل های upload شده در GridView ظاهر نمایش داده می شوند. روی link button کلیک کنید تا بتوانید فایل را دانلود کنید.

فایل های ضمیمه