我的数据库中有一些单独的字段,用于存储文件名和文件名。各种文件的路径(代码,指南,图像,视频) - 例如ImageName,的ImagePath,VideoName,将videoPath等
我决定将文件名绑定在一个列中。这就是我在gridivew中显示它们的方式。
单击下载链接时,会出现异常。 类型' System.IO.DirectoryNotFoundException'的例外情况发生在mscorlib.dll但未在用户代码中处理。附加信息:无法找到路径的一部分
当用户点击下载链接时,这是我的代码:
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "download")
{
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow row = GridView1.Rows[index];
string fName = row.Cells[1].Text;
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=" + fName);
//Retrieve the file
Response.TransmitFile(Server.MapPath("SFiles/Submissions/" + Session["userid"]
+ "/" + fName));
Response.End();
}
}
我相信这个异常是由于我在一个列中绑定多个数据字段而引发的,因此,有多个文件路径。我还不确定如何解决它。
答案 0 :(得分:0)
fname将等于" mycodes.zip instalationguide.zip等"
因此以下命令将失败
Response.AddHeader(" Content-Disposition"," attachment; filename =" + fName);
首先:这不是好习惯。恶意可以通过在帖子中注入错误数据来下载硬盘上的大部分文件。
第二:在一个请求中下载多个文件时会出现问题,解决方案是将服务器端拉链(或者说是某些类似的),然后将ziped文件发送给用户。
答案 1 :(得分:0)
您无法发送多个文件,因为每个响应只能发送一个文件或一个页面。
任何允许您下载多个文件的网站都会使用您选择的文件,压缩它们并下载zip文件。
当然你可以做的是让代码打开几个标签/窗口并让每个人下载它的相应文件,但那将是可怕的,凌乱的,不直观的......我提到了可怕的吗?此外,您可能会遇到安全软件阻塞多个标签/窗口的问题,因此请不要再考虑它了。