我有一个包含数据的GridView,包括文件名,我只能从一个文件夹下载文件,无法下载子文件夹中的文件。我一直在用这个
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Download")
{
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "filename=" + e.CommandArgument);
Response.TransmitFile(Server.MapPath("Upload\\Track\\Files") + e.CommandArgument);
Response.End();
}
}
我已尝试添加此功能,但我收到一条错误消息,说明其非法。
string path = Server.MapPath("\\Upload\\Track\\Files\\ ,*," + SearchOption.AllDirectories);
Response.TransmitFile(path + e.CommandArgument);
我希望能够使用此方法下载所有文件,包括子文件夹中的文件。
更新 - 我也尝试过这种方式,但没有成功,我知道我可以走正确的道路,但它不会下载。
string path = Server.MapPath("\\Upload\\Track\\Files");
string filename = e.CommandArgument.ToString();
DirectoryInfo dir = new DirectoryInfo(path);
string pathString = System.IO.Path.Combine(dir + path);
if (e.CommandName == "Download")
{
System.IO.Directory.GetDirectories(path);
if (File.Exists(pathString)) {
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "filename=" + filename);
Response.TransmitFile(pathString);
Response.End();
答案 0 :(得分:0)
所以我找到了一个问题的解决方案,我在我的数据库中添加了一个字段,其中包含有关路径的信息 - 我从上传文件时获取此路径,该文件捕获路径并将其添加到数据库中。我还在GridView的上传字段中添加了以下代码。
此解决方案目前最适合我,但当然可以改进。
<asp:TemplateField HeaderText="Quote" InsertVisible="false">
<ItemTemplate>
<a href="<%# Eval("FilePath") %>/<%# Eval("Uploads") %>"><%# Eval("Uploads") %></a>
</ItemTemplate>
</asp:TemplateField>