首页 新闻 会员 周边 捐助

如何实现asp.net的下载功能?

0
悬赏园豆:10 [已解决问题] 解决于 2011-04-07 13:44

希望能够下载任何格式的文件,点击下载链接后能出现"文件另存为"的对话框,并且性能比较好的方法

天亦玄的主页 天亦玄 | 初学一级 | 园豆:31
提问于:2010-08-19 20:33
< >
分享
最佳答案
0

如果想通用的话,建议还要做一步处理就是一些下载工具的下载拦截,比如下载EXE或者RAR文件经常会被迅雷等下载工具拦截掉,导致了无法正常弹出下载对话框,有关这方面的文章可以看下:

http://www.cnblogs.com/smjack/archive/2009/02/26/1398748.html

附一个我一直用的通用方法:

 

/// <summary>
/// 执行文件下载
/// </summary>
/// <param name="FullFileName">位于服务器上要下载的绝对文件路径</param>
/// <param name="page">page对象</param>
/// <param name="clientFileName">下载到客户端的文件名</param>
public static void ExecDataDownload(string FullFileName, Page page, string clientFileName)
{
if(string.IsNullOrEmpty(FullFileName))
{
throw new ArgumentNullException("输入了空的文件名!");
}
if(page == null)
{
throw new ArgumentNullException("未提供Page对象!");
}
string fileName = FullFileName;
FileInfo info
= new FileInfo(fileName);
if(string.IsNullOrEmpty(clientFileName))
{
clientFileName
= info.Name;
}
if(info.Exists)
{
FileStream f
= new FileStream(FullFileName, FileMode.Open);
byte[] buffer = new byte[f.Length];
f.Read(buffer,
0, buffer.Length);
f.Close();
page.Response.Clear();
page.Response.AppendHeader(
"Content-Disposition", "Attachment;FileName=" + HttpUtility.UrlEncode(clientFileName));
page.Response.AppendHeader(
"Content-Length", info.Length.ToString());
page.Response.ContentType
= "application/octet-stream";
page.Response.TransmitFile(info.FullName);
page.Response.BinaryWrite(buffer);
page.Response.End();
page.Response.Close();
}
else
{
string[] array = fileName.Split(new char[] { '\\' });
Array.Reverse(array);
throw new Exception("要下载的文件[" + array[0] + "]不存在!");
}
}

 

 


 

不过如果客户端机器上安装了迅雷等下载软件,会被迅雷等拦截,可以结合上面的链接进行处理

收获园豆:10
kyo-yo | 大侠五级 |园豆:5587 | 2010-08-20 09:55
其他回答(2)
0
HUHU慈悲 | 园豆:9973 (大侠五级) | 2010-08-19 20:39
0
Astar | 园豆:40805 (高人七级) | 2010-08-20 09:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册