我有一个DataGrid,其中有一个LinkButton。 LinkButton将显示一个文件名并具有它 设置CommadName和CommandArgument,以便在单击按钮时触发RowCommandFire(...)事件。目的是下载LinkButton链接的文件。 但是,在运行时 - 我正在下载诸如filesViewPage.aspx之类的页面名称,而不是请求下载的实际文件。我有以下代码 - 但它不是应该下载文件。我确保了“application / octet-stream”的IIS 7 MIME类型条目,文件扩展名为“。*” - 存在。
缺少什么。请帮忙......
protected void RowCommandFire(object sender, GridViewCommandEventArgs e) {
if (e.CommandName == "DownloadFile")
{
try {
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
FileInfo fileToDownload = new FileInfo(Server.MapPath("~/Uploads/") + e.CommandArgument);
//byte[] bytes = File.ReadAllBytes(fileToDownload.FullName);
if (fileToDownload.Exists) {
string filename = e.CommandArgument.ToString();
Response.ContentType = "application/octet-stream";
Response.AppendHeader("content-disposition", "attachment; filename=" + filename);
Response.AppendHeader("content-length", fileToDownload.Length.ToString());
Response.TransmitFile(fileToDownload.FullName);
//Response.WriteFile(fileToDownload.FullName);
//Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
}
} catch (Exception ex) {
msg.Text = ex.Message;
}
}
答案 0 :(得分:0)
如果你的路径是正确的,只需使用:
Response.BinaryWrite(File.ReadAllBytes(Server.MapPath("~/Uploads/") + e.CommandArgument));
而不是:
Response.TransmitFile(fileToDownload.FullName);