Displaying the files for a specific folder and allow the user to download them.
This is how to to list the files in a specific directory and allow the user to download the files.
ASPX:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="2"
ForeColor="#333333" GridLines="None" AllowPaging="True">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="lnkdownload" runat="server" Text="Download" CommandName="Download"
CommandArgument='<%#Eval("FullName") +";" + Eval("Name") %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Name" HeaderText="File Name" />
<asp:BoundField DataField="Length" HeaderText="Size (Bytes)" />
</Columns>
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<EditRowStyle BackColor="#999999" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
</asp:GridView>
VB:
Private Sub BindGrid()
Dim DataDirectory As String = "~/Uploads"
Dim files() As FileInfo = New DirectoryInfo(Server.MapPath(DataDirectory)).GetFiles
GridView1.DataSource = files
GridView1.DataBind()
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
BindGrid()
End If
End Sub
Private Sub Downloadfile(ByVal fileName As String, ByVal FullFilePath As String)
Response.AddHeader("Content-Disposition", "attachment; filename=" & fileName)
Response.TransmitFile(FullFilePath)
Response.End()
End Sub
Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand
If e.CommandName = "Download" Then
Dim fileInfo() As String = e.CommandArgument.ToString().Split(";")
Dim FileName As String = fileInfo(1)
Dim FullPath As String = fileInfo(0)
Downloadfile(FileName, FullPath)
End If
End Sub
Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.PageIndexChanging
GridView1.PageIndex = e.NewPageIndex
BindGrid()
End Sub
Note: the mentioned code List the files from "Uploads" directory , and so you may need to change the name of that folder based on your website, also the code can be extended to allow the user to Dynamicly selects the directory name to list its files.
Revision number 1, Sunday, June 08, 2008 3:25:05 AM by anas
This is not the most up to date version of this article. The most recent version can be found here.
You must Login to comment.
|
Tue, Jun 10, 2008 8:34 AM
by Dynamic2008
|
Cool!
|
|
Thu, Jan 28, 2010 12:12 PM
by desertfoxaz
|
It might be helpful to specify a content length as well so the download dialog will properly show the bytes remaining and be able to determine the time remaining. Dim fi As FileInfo = new FileInfo(FullFilePath) Response.AddHeader("Content-Length", fi.Length.ToString() Sorry, I know C#, not VB.Net so hopefully that's syntactically correct. Response.AddHeader("Content-Length",
|
|
Tue, Sep 7, 2010 4:36 AM
by botol
|
Can someone please help me to do it in asp.net C#.because somehow it is not working . it is getting redirected to the same page...........pleaseeeeeee help me it's urgent......
|