您的位置:首页 > 编程语言 > ASP

用asp.net 下载文件

2014-05-07 13:44 381 查看
用asp下载文件,如果确定文件名,不是txt,bin...之类的文件可以直接用<a>标签下载,标签的href属性是文件的路径;
但是这种方式在IE浏览器中会出现不下载而是直接打开的问题,这是我们所不希望的;

解决方案:

设置网站的mimeMap;

一是设置IIS的配置,但是我的电脑安装好IIS之后却不能打开网站,所以这一步没有细细研究,只是知道可以这样做而已,如果以后有需要,可以自行查找教程,知道有这样的方法就好;

二是在网页后台设置mimeMap,使用Response可以设置,以下是网上的一段代码:

public void DownloadFile(string path, string name)
{
try
{
System.IO.FileInfo file = new System.IO.FileInfo(path);
Response.Clear();
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.UTF8;
// 添加头信息,为"文件下载/另存为"对话框指定默认文件名
Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(name));
// 添加头信息,指定文件大小,让浏览器能够显示下载进度
Response.AddHeader("Content-Length", file.Length.ToString());
// 指定返回的是一个不能被客户端读取的流,必须被下载
Response.ContentType = "application/ms-excel";
// 把文件流发送到客户端
Response.WriteFile(file.FullName);
// 停止页面的执行
Response.End();
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
catch (Exception ex)
{
Response.Write("<script>alert('系统出现以下错误://n" + ex.Message + "!//n请尽快与管理员联系.')</script>");
}
}


Ps:

1、我是使用asp:Button点击事件触发后台一个函数然后调用这个下载函数的,开始使用了updatePanel包含asp:Button控件,这会导致异步执行后台事件,所以下载过程会需要其他页面,后来我是不使用updatePanel包含处理,虽然页面点击之后会刷新,但至少能下载了,呵呵。http://blog.csdn.net/scate/article/details/5341382 这里有解决方法,但这是另外创建了一个页面,不是我的需求。

2、动态添加下载链接:

for (var j = 1; j < filesInOneDir.length; j++) {
var trA = document.createElement("tr");
dirANDfile = dir + "/" + filesInOneDir[j];
var ss = "ss";
var textBox = document.getElementById("fileName");
trA.innerHTML = "<td><input type='checkBox' value=" + i + "\:" + filesInOneDir[j] + "><span>" + filesInOneDir[j] + "</span></t d ><td style='width:7%;right:5px'><a style='cursor:pointer' onclick='javascript:downloadFile(\"" + dirANDfile + "\")'>下载</a></td>";
tableId.appendChild(trA);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C# asp.net 下载