有上传控件FileUpload,不知道有没有类似的下载控件?
如果没有,自己编一个控件,点击这个控件下载,这个控件应该为函数提供什么参数,文件在服务器上的地址吗?
还有就是下载一个文件这个函数代码怎么写?
谢谢各位大侠!

解决方案 »

  1.   

    下载文件不需要什么控件啊。
    普通的超链接就可以啊
    <a href="要下载的文件.rar">点击此处下载</a>
      

  2.   

    控件在于封装一些东西,在于复用
    下载本来就是一个href而已!
      

  3.   

    用一个超链接指向要下载的文件就可以将文件下载比如<a href="服务器路径/文件名.后缀">下载文件</a> 
      

  4.   

    我以前也找过,没找到控件.
    只要是不被ASP.NET服务器解析的文件,都可以直接用一个超连接.
    下载一半取消什么的问题,你都不用考虑,你可以放你项目中一个图片,然后在浏览器中直接输入图片的地址,其他的浏览器帮你完成
      

  5.   

       请看下面的做法是否合你的要求?
      protected void Button1_Click(object sender, EventArgs e)
        {
            string path = Server.MapPath("file\s.wmv");
            this.DownloadFile(Page.Response, path);
        }
        /// <summary>
        /// 下载服务器上的文件
        /// </summary>
        /// <param name="PageResponse">程序中可以设置参数:HttpResponse ht=Page.Response;</param>
        /// <param name="serverPath">服务器上的文件路径</param>
        public void DownloadFile(HttpResponse response, string serverPath)
        {
            FileStream fs = null;
            try
            {
                fs = File.OpenRead(serverPath);
                byte[] buffer = new byte[1024];
                long count = 1024;
                response.Buffer = true;
                response.AddHeader("Connection", "Keep-Alive");
                response.ContentType = "application/octet-stream";
                response.AddHeader("Content-Disposition", "attachment;filename=" + Path.GetFileName(serverPath));//下载时要保存的默认文件名
                response.AddHeader("Content-Length", fs.Length.ToString());
                while (count == 1024)
                {
                    count = fs.Read(buffer, 0, 1024);
                    response.BinaryWrite(buffer);
                }
            }
            finally
            {
                fs.Close();
            }
        }
    }
      

  6.   

    下载时写代码就可以了,不用什么控件再贴上一个方法供楼主参考://TransmitFile实现下载
        protected void Button1_Click(object sender, EventArgs e)
        {
            /*
             微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite
             下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。
             代码如下:
             */        Response.ContentType = "application/x-zip-compressed";
            Response.AddHeader("Content-Disposition", "attachment;filename=z.zip");
            string filename = Server.MapPath("DownLoad/z.zip");
            Response.TransmitFile(filename);
        }    //WriteFile实现下载
        protected void Button2_Click(object sender, EventArgs e)
        {
            /*
             using System.IO;
             
             */        string fileName = "asd.txt";//客户端保存的文件名
            string filePath = Server.MapPath("DownLoad/aaa.txt");//路径        FileInfo fileInfo = new FileInfo(filePath);
            Response.Clear();
            Response.ClearContent();
            Response.ClearHeaders();
            Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
            Response.AddHeader("Content-Length", fileInfo.Length.ToString());
            Response.AddHeader("Content-Transfer-Encoding", "binary");
            Response.ContentType = "application/octet-stream";
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
            Response.WriteFile(fileInfo.FullName);
            Response.Flush();
            Response.End();
        }    //WriteFile分块下载
        protected void Button3_Click(object sender, EventArgs e)
        {        string fileName = "aaa.txt";//客户端保存的文件名
            string filePath = Server.MapPath("DownLoad/aaa.txt");//路径        System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);        if (fileInfo.Exists == true)
            {
                const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
                byte[] buffer = new byte[ChunkSize];            Response.Clear();
                System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);
                long dataLengthToRead = iStream.Length;//获取下载的文件总大小
                Response.ContentType = "application/octet-stream";
                Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
                while (dataLengthToRead > 0 && Response.IsClientConnected)
                {
                    int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小
                    Response.OutputStream.Write(buffer, 0, lengthRead);
                    Response.Flush();
                    dataLengthToRead = dataLengthToRead - lengthRead;
                }
                Response.Close();
            }
        }    //流方式下载
        protected void Button4_Click(object sender, EventArgs e)
        {
            string fileName = "aaa.txt";//客户端保存的文件名
            string filePath = Server.MapPath("DownLoad/aaa.txt");//路径        //以字符流的形式下载文件
            FileStream fs = new FileStream(filePath, FileMode.Open);
            byte[] bytes = new byte[(int)fs.Length];
            fs.Read(bytes, 0, bytes.Length);
            fs.Close();
            Response.ContentType = "application/octet-stream";
            //通知浏览器下载文件而不是打开
            Response.AddHeader("Content-Disposition", "attachment;  filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
            Response.BinaryWrite(bytes);
            Response.Flush();
            Response.End();    }