asp.net 下载文件

using System;   
using System.Collections.Generic;   
using System.Linq;   
using System.Web;   
using System.Web.UI;   
using System.Web.UI.WebControls;   
using System.IO;   
  
namespace WebApplication1   
{   
    public partial class DownfFile : System.Web.UI.Page   
    {   
        protected void Page_Load(object sender, EventArgs e)   
        {   
              
        }   
        /// <summary>   
        /// WriteFile下载   
        /// </summary>   
        /// <param name="sender"></param>   
        /// <param name="e"></param>   
        protected void Button1_Click(object sender, EventArgs e)   
        {   
            string name ="DreamweaverCS3简体中文免激活绿色版.rar";   
            string path =Server.MapPath("DreamweaverCS3简体中文免激活绿色版.rar");   
            FileInfo fileinfo = new FileInfo(path);   
            long size = fileinfo.Length;   
            Response.Clear();   
            Response.ContentType = "application/octet-stream";   
            Response.AppendHeader("Content-Disposition", "attachment;filename=" + name);   
            Response.AppendHeader("Content-Length", size.ToString());   
            Response.AppendHeader("Content-Transfer-Encoding", "binary");   
            Response.ContentEncoding = System.Text.Encoding.UTF8;//GetEncoding("gb2312");   
            Response.WriteFile(path,0,size);   
            Response.Flush();   
            Response.End();   
        }   
        /// <summary>   
        /// 使用OutputStream.Write分块下载文件   
        /// </summary>   
        /// <param name="sender"></param>   
        /// <param name="e"></param>   
      
        protected void Button2_Click(object sender, EventArgs e)   
        {   
            string fileName = HttpContext.Current.Server.UrlEncode("DreamweaverCS3简体中文免激活绿色版.rar");  
            string filePath = HttpContext.Current.Server.MapPath("DreamweaverCS3简体中文免激活绿色版.rar");   
            //如果要写类的话用HttpResponse ht=Page.Response然后方法写void DownloadFile(HttpResponse response, string serverPath)   
  
  
            FileInfo fileinfo = new FileInfo(filePath);   
            if (fileinfo.Exists)   
            {   
               const long size = 102400;         //指定下载块的大小   
                byte[] by = new byte[size]; //建立一个100kb的缓存去大小   
                long dataread = 0;          //已读的字节数   
                try  
                {   
                    //打开文件     
                    FileStream filestream = new FileStream(filePath, FileMode.Open, FileAccess.Read);   
                    dataread = filestream.Length;//文件总的大小   
                    int i = 0;   
                    //添加Http头   
                    Response.Clear();   
                    Response.ContentType = "application/octet-stream";   
                    Response.AddHeader("Content-Disposition", "attachement;filename=" + fileName);   
                    Response.AddHeader("Content-Length", dataread.ToString());   
                    while (dataread > 0)   
                    {   
                        if (Response.IsClientConnected)   
                        {   
                            int length = filestream.Read(by,0, Convert.ToInt32(size));   
                            Response.OutputStream.Write(by, 0, length);   
                            Response.Flush();   
                            Response.Clear();   
                            by = new byte[size];   
                            i++;   
                            dataread = dataread - length;//判断是否读取玩 如果读取完就跳出while循环   
                        }   
                        else  
                        {   
                            dataread = -1;//客户端已经失去连接中段操作   
                        }   
                        //filestream.Close();   
                        //Response.Close();就是多写这行代码 导致下载文件只有100kb   
                    }   
                }   
                catch  { }   
  
            }   
        }   
           
        /// <summary>   
        /// 使用BinaryWrite下载文件,大文件效率不行   
        /// </summary>   
        /// <param name="sender"></param>   
        /// <param name="e"></param>   
        protected void Button3_Click(object sender, EventArgs e)   
        {   
            string name = "DreamweaverCS3简体中文免激活绿色版.rar";   
            string path = Server.MapPath("DreamweaverCS3简体中文免激活绿色版.rar");   
  
            FileStream filestream = File.OpenRead(path);   
            byte[] by = new byte[filestream.Length];   
  
            filestream.Read(by, 0, by.Length);   
            filestream.Close();   
            Response.ContentType = "application/octet-stream";   
            Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(name));  
            Response.AddHeader("Content-Length", by.Length.ToString());   
            Response.BinaryWrite(by);   
            Response.Flush();   
            Response.End();   
        }   
        /// <summary>   
        /// 使用TransmifFile下载文件   
        /// </summary>   
        /// <param name="sender"></param>   
        /// <param name="e"></param>   
        protected void Button4_Click(object sender, EventArgs e)   
        {     
            //提供下载的文件,不编码的话文件名会乱码      
            string fileName = "DreamweaverCS3简体中文免激活绿色版.rar"; //HttpContext.Current.Server.UrlEncode("DreamweaverCS3简体中文免激活绿色版.rar");   
             string filePath = Server.MapPath("DreamweaverCS3简体中文免激活绿色版.rar");//HttpContext.Current.Server.UrlEncode(Server.MapPath("DreamweaverCS3简体中文免激活绿色版.rar"));   
             FileInfo fileinfo = new FileInfo(filePath);   
             long filesize = fileinfo.Length;   
             Response.Clear();   
             Response.ContentType = "application/x-zip-compressed";   
             Response.AddHeader("Content-Disposition", "attachment;filename="+ fileName);   
            //不指明Content-Length用Flush的话不会显示下载进度   
             Response.AddHeader("Content-Length", filesize.ToString());   
             Response.TransmitFile(fileName, 0, filesize);   
             Response.Flush();   
             Response.Close();   
        }   
        /// <summary>   
        /// 使用BinaryWrite分块下载文件   
        /// </summary>   
        /// <param name="sender"></param>   
        /// <param name="e"></param>   
        protected void Button5_Click(object sender, EventArgs e)   
        {   
            string fileName = HttpContext.Current.Server.UrlEncode("DreamweaverCS3简体中文免激活绿色版.rar");  
            string filePath = HttpContext.Current.Server.MapPath("DreamweaverCS3简体中文免激活绿色版.rar");   
  
            long size = 102400;         //指定下载块的大小   
            byte[] by = new byte[size]; //建立一个100kb的缓存去大小   
            long dataread = 0;          //已读的字节数   
            try  
            {   
                //打开文件     
                FileStream filestream = new FileStream(filePath, FileMode.Open, FileAccess.Read);   
                dataread = filestream.Length;//文件总的大小   
  
                //添加Http头   
                Response.Clear();   
                Response.ContentType = "application/octet-stream";   
                Response.AddHeader("Content-Disposition", "attachement;filename=" + fileName);   
                Response.AddHeader("Content-Length", dataread.ToString());   
                while (dataread > 0)   
                {   
                    if (Response.IsClientConnected)   
                    {   
                        int length = filestream.Read(by, 0, Convert.ToInt32(size));   
                        Response.BinaryWrite(by);   
                        Response.Flush();   
                        Response.Clear();   
                        dataread = dataread - length;//判断是否读取玩 如果读取完就跳出while循环   
                    }   
                    else  
                    {   
                        dataread = -1;//客户端已经失去连接中段操作   
                    }   
                    //filestream.Close();   
                    //Response.Close();   
                }   
            }   
            catch  { }   
        }   
           
    }   
} 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值