我想在vs2005上做一个客户端文件下载功能我需要用什么控件来实现此功能啊!

解决方案 »

  1.   

    上传  FileUpload控件 保存路径========文件上传===============================================
    protected void Button1_Click(object sender, EventArgs e)
        {
            Boolean fileOk = false;
    //获取文件物理路径
            string path = Server.MapPath("~/Account/");
    //判断是否选择文件
            if (FileUpload1.HasFile)
            {
        //取得文件扩展名 
                string exName = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
        //限定文件类型
                string[] allowExtn = { ".jpg", ".txt", ".gif" };
                //对上传的文件的类型进行一个个匹对
                for (int i = 0; i < allowExtn.Length; i++)
                {
                    if (exName == allowExtn[i])
                    {
                        fileOk = true;
                        break;
                    }
                }

                ////对上传文件的大小进行检测,限定文件最大不超过1M
                //if (FileUpload1.PostedFile.ContentLength > 1024000)
                //{
                //    fileOk = false;
                //}            if (!fileOk)
                {
                    Response.Write("<script>alert('文件类型不对');</script>");
                }
                else
                {
                    try
                    {
                        FileUpload1.PostedFile.SaveAs(path + FileUpload1.FileName);
                        Response.Write("<script>alert('上传成功');</script>");
                    }
                    catch
                    {                    Response.Write("<script>alert('上传失败');</script>");
                    }
                }        }
    下载 <a href='文件路径'>下载 </a>       直接点击下载
      

  2.   

    //四种下载方未能
    //你可以用以用个linkbutton放上去。。设置视图双击
    //然后把代码放进去。
        protected void Button1_Click(object sender, EventArgs e)
            {
                //TransmitFile实现下载            /**/
                /*
                 微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite
                 下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。
                 代码如下:
                */            Response.ContentType = "application/x-zip-compressed";
                Response.AddHeader("Content-Disposition", "attachment;filename=keji.rar");
                string filename = Server.MapPath("keji.rar");
                Response.TransmitFile(filename);
                Response.Write("<script language=\"javascript\" type=\"text/javascript\">");
                Response.Write("alert(\"下载成功\");");
                Response.Write("window.location.href=\"C_SC.aspx\";");
                Response.Write("</script>");
            }        protected void Button2_Click(object sender, EventArgs e)
            {            //WriteFile实现下载
                string fileName = "ceshi.rar";//客户端保存的文件名
                string filePath = Server.MapPath("keji.rar");//路径            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();
            }        protected void Button3_Click(object sender, EventArgs e)
            {
                //WriteFile分块下载            string fileName = "GhostXP.iso";//客户端保存的文件名
                string filePath = Server.MapPath("GhostXP7.7.iso");//路径            System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);            if (fileInfo.Exists == true)
                {
                    const long ChunkSize = 409600;//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 = "ce2.rar";//客户端保存的文件名
                string filePath = Server.MapPath("keji.rar");//路径            //以字符流的形式下载文件
                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();
            }
      

  3.   

    #region 文件下载
           public bool DownLoadFile(string localPath, string hostURL, int byteCount, string userID, long cruuent)
           {
               
               bool result = true;
               
               
               string tmpURL = hostURL;
              
               byteCount = byteCount * 1024;
               hostURL = tmpURL + "&npos=" + cruuent.ToString();
               
               System.IO.FileStream fs;  
               fs = new FileStream(localPath, FileMode.OpenOrCreate);
               if (cruuent > 0)
               {
                   //偏移指针
                   fs.Seek(cruuent, System.IO.SeekOrigin.Current); 
               }
               System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(hostURL);
               if (cruuent > 0)
               {
                   request.AddRange(Convert.ToInt32(cruuent));    //设置Range值
               }           try
               {
                   //向服务器请求,获得服务器回应数据流
                   System.IO.Stream ns = request.GetResponse().GetResponseStream();               byte[] nbytes = new byte[byteCount];
                   int nReadSize = 0;
                   nReadSize = ns.Read(nbytes, 0, byteCount);
                  
                   while (nReadSize > 0)
                   {
                       fs.Write(nbytes, 0, nReadSize);
                       nReadSize = ns.Read(nbytes, 0, byteCount);
                      
                   }
                   fs.Close();
                   ns.Close();
               }
               catch(Exception ex)
               {
                   LOG.Error("下载" + localPath + "的时候失败!" + "原因是:" + ex.Message);
                   fs.Close();
                   result = false;
               }
               return result;     
           }
           #endregion 上传
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Data.SqlClient;public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {    }
        protected void Button1_Click(object sender, EventArgs e)
        {
            string name = FileUpload1.FileName;//上传文件名字
            string size = FileUpload1.PostedFile.ContentLength.ToString();
            string type = FileUpload1.PostedFile.ContentType;
            string type2 = name.Substring(name.LastIndexOf(".") + 1);
            string ipath = Server.MapPath("upimg") + "\\" + name;
            string fpath = Server.MapPath("upfile") + "\\" + name;
            string path="F:\\aaa\\"+FileUpload1.FileName;
            string wpath = "upimg\\" + name;
            if (type2 == "jpg" || type2 == "gif" || type2 == "bmp" || type2 == "png")
            {
                FileUpload1.SaveAs("F:\\aaa\\"+FileUpload1.FileName);
               // Image1.ImageUrl="F:\\aaa\\"+FileUpload1.FileName;
                Label1.Text = "你传图片的名字是" + name + "<br>文件大小为" + size + "<br>文件类型为" + type2 + "<br>文件路径为" + ipath;
            }
            
            SqlConnection cn = new SqlConnection("server=.;database=Northwind;uid=sa;pwd=sa");
            SqlCommand cmd = new SqlCommand("insert into Image(imageName,imagepath) values('" + name + "','" + path + "')", cn);
            cn.Open();
            cmd.ExecuteNonQuery();
            cn.Close();
        }
        protected void Button2_Click(object sender, EventArgs e)
        {    SqlConnection cn = new SqlConnection("server=.;database=Northwind;uid=sa;pwd=sa");
        SqlCommand cmd = new SqlCommand("select imageName from Image where imageID='" + Convert.ToInt32(TextBox1.Text) + "'", cn);
        cn.Open();
        string a = cmd.ExecuteScalar().ToString();
        cn.Close();
        Image1.ImageUrl = "F:\\aaa\\" + a;
         }
    }