我能够创建一个GridView来显示文件和修改日期,但是现在我需要允许我的用户下载它们。这是我尝试过的:
我的FormLoad中的代码
DirectoryInfo di = new DirectoryInfo(Server.MapPath(strDirectory));
List<FileInfo> files = di.GetFiles().ToList();
GridView1.DataSource = files;
GridView1.DataBind();
下载文件方法
protected void DownloadFile(object sender, EventArgs e)
{
string filePath = (sender as LinkButton).CommandArgument;
Response.ContentType = ContentType;
Response.AppendHeader("Content-Disposition", "attachment;
filename=" + Path.GetFileName(filePath));
Response.WriteFile(filePath);
Response.End();
}
GridView中的链接按钮
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="lnkDownload"
Text = "Download" <%-----CommandArgument = '<%# Eval("Value") %>'-----%>
runat="server" OnClick = "DownloadFile"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
我不得不注释掉命令参数,因为当我从中更改formload中的代码以获取修改的日期/时间时:
string[] filePaths = Directory.GetFiles(Server.MapPath(strDirectory));
List<ListItem> files = new List<ListItem>();
foreach (string filePath in filePaths)
{
files.Add(new ListItem(Path.GetFileName(filePath), filePath));
}
GridView1.DataSource = files;
GridView1.DataBind();
它开始出现错误DataBinding:'System.IO.FileInfo'不包含名称为'Value'的属性。我该如何解决?
如错误所示,FileInfo
没有名为的属性Value
。不过,它还有其他属性。
根据您的DownloadFile
方法实现,您似乎希望该值是文件系统路径。那将是FullName
财产。所以它可能看起来像这样:
<asp:LinkButton ID="lnkDownload"
Text = "Download" CommandArgument = '<%# Eval("FullName") %>'
runat="server" OnClick = "DownloadFile"></asp:LinkButton>
请注意,但这不是一个好主意。它将文件系统信息提供给您的用户。就其本身而言,这似乎还不错,但是如果恶意用户试图收集有关您服务器的信息,那么您只是向他提供了另一条信息。最终,您的应用程序用户不需要了解您的服务器端文件系统,因此您不应该告诉他们。
我建议为您的文件维护某种标识符。如果它们都在同一目录中,那么您只需使用文件名即可:
<asp:LinkButton ID="lnkDownload"
Text = "Download" CommandArgument = '<%# Eval("Name") %>'
runat="server" OnClick = "DownloadFile"></asp:LinkButton>
然后,您需要在服务器端创建完整路径:
string fileName = (sender as LinkButton).CommandArgument;
string filePath = Path.Combine(directoryName, fileName);
(directoryName
将是包含文件的目录的路径,但是您要确定该路径。Web.config
为此,一个值很好用。)
如果它们不在同一文件夹中,那么我建议使用数据库表来跟踪文件。该表真正需要的只是一个主键(一个IDENTITY
列对此非常有用)和该文件的路径。
然后,您将绑定到该数据库表,而不是文件集合。该CommandArgument
会为表中的记录标识,以及DownloadFile
实施将使用标识符来查找表中的记录,然后使用文件路径形式记录来获取文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句