提供文件下载较简单的方式:
l 最省事的,就是在页面用标签直接链接到文件,如:<a href=’download.rar’>;
l 用javascript跳转到文件路径,如:location.href=’download.rar’;
这样的方式暴露了文件路径,没有权限的用户也能在地址栏输入URL进行下载。而且,浏览器对每种文件类型的处理方式都不同。默认情况下,若链接路径是网页、图片或普通文本,会在浏览器中直接打开而不出现“另存为”对话框。
另外,如果文件原本不存在是动态产生的,就需要后台获取文件路径再触发javascript事件。在ie下,这样会出现信息栏提示”为帮助保护您的安全,Internet Explorer阻止从此站点下载文件到您的计算机…”,选择”下载文件”选项解除阻止后,页面会刷新导致后台事件重复执行又生成一次文件,用户体验不佳并且增加了服务器负担。
较有效的解决方案:
Response. TransmitFile(string filename),这个方法在下载文件时,不用在内存中对文件进行缓冲处理就能将其发送到客户端浏览器。
示例:下载名为' example.zip'的压缩包
Response.ContentType = "application/x-zip-compressed";
// 添加头信息,指定默认文件名
Response.AppendHeader("Content-Disposition", "attachment; filename=example.zip");
//直接写入输出流,不进行缓存
Response.TransmitFile( Server.MapPath(@"~/download/example.zip") );
Response.End();
/*
* Content-Disposition参数
* attachment,作为附件下载
* inline,在线打开
*/