ASP.NET文件下载的几种方法

当服务器要提供文件下载时,HttpResponse有这么几种方法可以使用。
1)用Response.WriteFile,如:
       
        Response.ContentType  =   " application/octet-stream " ;
        Response.WriteFile(
@" whatever.zip " );

2) 采用aspnet2.0的新方法 Response.TransmitFile,注意此方法将指定的文件直接写入 HTTP 响应输出流,而不在内存中缓冲该文件。如:
     
(假设同文件夹下有个需要下载的文件叫whatever.zip,而用户下载时默认名称为downloadfilename.zip)
3)需要注意的是,我们都知道Server.ScriptTimeout 的默认值是90秒,而当我们在web.config中打开调试模式,此值变为30,000,000秒。这也是为什么我在开发时一般不会发现超时问题。当下载大文件时,用Response.WriteFile会使Aspnet_wp.exe缓存了太大空间而导致下载失败。
    这时建议采用文件流形式。如:
 

        Response.ContentType  =   " application/x-zip-compressed " ;
        Response.AddHeader(
" Content-Disposition " " attachment;filename=downloadfilename.zip " );
        Response.TransmitFile(
@" whatever.zip " );

 

System.IO.Stream iStream  =   null ;

        
// 以10K为单位缓存:
         byte [] buffer  =   new  Byte[ 10000 ];

       
int  length;

       
long  dataToRead;

        
//  制定文件路径.
         string  filepath  =   @" D:/mybigfile.zip " ;

        
//   得到文件名.
         string  filename  =  System.IO.Path.GetFileName(filepath);

        
try
        
{
            
// 打开文件.
            iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open,
                        System.IO.FileAccess.Read, System.IO.FileShare.Read);


            
// 得到文件大小:
            dataToRead = iStream.Length;

            Response.ContentType 
= "application/octet-stream";
            Response.AddHeader(
"Content-Disposition""attachment; filename="+filename);

            
while (dataToRead > 0)
            
{
                
//保证客户端连接
                if (Response.IsClientConnected)
                
{
                   length 
= iStream.Read(buffer, 010000);

                   Response.OutputStream.Write(buffer, 
0, length);

                    Response.Flush();

                    buffer 
= new Byte[10000];
                    dataToRead 
= dataToRead - length;
                }

                
else
                
{
                    
//结束循环
                    dataToRead = -1;
                }

            }

        }

        
catch  (Exception ex)
        
{
            
// 出错.
            Response.Write("Error : " + ex.Message);
        }

        
finally
        
{
            
if (iStream != null)
            
{
                
//关闭文件
                iStream.Close();
            }

        }

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值