当前位置:编程学习 > C#/ASP.NET >>

winform实现文件上传功能

--------------------编程问答-------------------- ftp传至服务器,或者自己写cs程序,socket传输 --------------------编程问答-------------------- --------------------编程问答-------------------- 使用 WebClient 异步上载文件 --------------------编程问答-------------------- http://dotnet.aspx.cc/article/d8f961c3-cbc1-4591-143d-236b572eb89f/read.aspx
利用WebClient类向服务器上载文件 --------------------编程问答-------------------- WebClient 上传。支持大文件上传吗? --------------------编程问答-------------------- 100M没问题
具体可以用webclient的 uploadfile 和openwirte方法。
http://msdn.microsoft.com/zh-cn/library/esst63h0(v=VS.80).aspx --------------------编程问答-------------------- --------------------编程问答-------------------- 原来webclient还有这等用途,学习了.可怜的赚分之路... --------------------编程问答-------------------- FTP是首选。因为50个客户端同时上传50MB文件,HTTP服务器基本挂掉。通过HTTP方式上传文件时WEB服务器会将文件缓存到内存中,然后再写到硬盘中。

FTP是直接写到硬盘中的。而且通过FTP实现断点续传要比通过HTTP方式简单,效率要高。布署也更方便。 --------------------编程问答-------------------- 现在已经有成熟的FTP文件上传控件,可集成在WEB中,布署也方便,用户使用也方便。升级也方便。
而且同样可以自动上传指定的本地文件。

楼主有兴趣可以试试这个控件:http://www.cnblogs.com/xproer/archive/2010/04/17/1714073.html
此控件是基于标准FTP协议实现的文件上传功能。支持10G大小文件的断点续传,用户体验非常好,特别适合有超大文件上传需求的项目。
另外一个特点是支持自动上传指定的本地文件


--------------------编程问答-------------------- 还没搞定!!!!
好吧。昨天写来测试的,通过。

    protected void Page_Load(object sender, EventArgs e)
    {
        System.IO.Stream sr = Request.InputStream;
      
        if (sr.Length > 0)
        {
            string filename = Request.QueryString["filename"];
            int size = 1024;
            byte[] by = new byte[size];
            int length =sr.Read(by, 0, size);
            System.IO.FileStream fs = new System.IO.FileStream(Path.Combine(Server.MapPath("Image"), filename), System.IO.FileMode.Create, System.IO.FileAccess.Write);
            while (length > 0)
            {
                fs.Write(by, 0, by.Length);
                length = sr.Read(by, 0, size);
            }
            fs.Close();
            sr.Close();
            Response.Write("Success\r\n");
        }
}
  web页面


下面写了两种方式上传webclient  hettpwebrequest   
 public   class UploadFile
    {
        /// <summary> 
        /// 将本地文件上传到指定的服务器(HttpWebRequest方法) 
        /// </summary> 
        /// <param name="address">文件上传到的服务器</param> 
        /// <param name="fileNamePath">要上传的本地文件(全路径)</param> 
        /// <param name="progressBar">上传进度条</param> 
        /// <returns>成功返回1,失败返回0</returns> 
        public static int Upload_Request(string address, string fileNamePath, System.Windows.Forms.ProgressBar progressBar)
        {
            int returnValue = 0;
            // 要上传的文件 
            FileStream fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read);
            BinaryReader r = new BinaryReader(fs);
            // 根据uri创建HttpWebRequest对象 
            address = string.Concat(address, "?filename=", Path.GetFileName(fileNamePath));
            HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(new Uri(address));
            httpReq.Method = "POST";
            //对发送的数据不使用缓存 
            httpReq.AllowWriteStreamBuffering = false;
            //设置获得响应的超时时间(30秒) 
            httpReq.Timeout = 30000;
            long fileLength = fs.Length;
            httpReq.ContentLength = fileLength;
            try
            {
                progressBar.Maximum = (int)fs.Length;
                progressBar.Minimum = 0;
                progressBar.Value = 0;
                //每次上传4k 
                int bufferLength = 4096;
                byte[] buffer = new byte[bufferLength];
                //已上传的字节数 
                long offset = 0;
                //开始上传时间 
                DateTime startTime = DateTime.Now;
                int size = r.Read(buffer, 0, bufferLength);
                Stream postStream = httpReq.GetRequestStream();
                while (size > 0)
                {
                    postStream.Write(buffer, 0, size);
                    offset += size;
                    progressBar.Value = (int)offset;
                    TimeSpan span = DateTime.Now - startTime;
                    double second = span.TotalSeconds;
                    Console.WriteLine("已用时:" + second.ToString("F2") + "秒");
                    if (second > 0.1)
                    {
                        Console.WriteLine(" 平均速度:" + (offset / 1024 / second).ToString("0.00") + "KB/秒");
                    }
                    else
                    {
                        Console.WriteLine(" 正在连接…");
                    }
                    Console.WriteLine("已上传:" + (offset * 100.0 / fileLength).ToString("F2") + "%");
                    Console.WriteLine((offset / 1048576.0).ToString("F2") + "M/" + (fileLength / 1048576.0).ToString("F2") + "M");
                    Application.DoEvents();
                    size = r.Read(buffer, 0, bufferLength);
                }
                postStream.Close();
                //获取服务器端的响应 
                WebResponse webRespon = httpReq.GetResponse();
                Stream s = webRespon.GetResponseStream();
                StreamReader sr = new StreamReader(s);
                //读取服务器端返回的消息 
                String sReturnString = sr.ReadLine();
                s.Close();
                sr.Close();
                if (sReturnString == "Success")
                {
                    returnValue = 1;
                }
                else if (sReturnString == "Error")
                {
                    returnValue = 0;
                }
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.ToString());
                returnValue = 0;
            }
            finally
            {
                fs.Close();
                r.Close();
            }
            return returnValue;
        }

        /// <summary> 
        /// 将本地文件上传到指定的服务器(WebClient方法) 
        /// </summary> 
        /// <param name="address">文件上传到的服务器</param> 
        /// <param name="fileNamePath">要上传的本地文件(全路径)</param> 
        /// <param name="progressBar">上传进度条</param> 
        /// <returns>成功返回1,失败返回0</returns> 
        public static int Upload_Client(string address, string fileNamePath, System.Windows.Forms.ProgressBar progressBar)
        {
            WebClient wc = new WebClient();
            FileStream fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read);
            address = string.Concat(address, "?filename=", Path.GetFileName(fileNamePath));
            Stream poststream = wc.OpenWrite(address, "POST");
            byte[] buffer = new byte[1024];
            int mum = (int)fs.Length;
            progressBar.Maximum = mum;
            progressBar.Minimum = 0;
            progressBar.Value = 0;
            //已上传的字节数 
            long offset = 0;
            int length = fs.Read(buffer, 0, buffer.Length);//读取长度
            //开始上传时间 
            DateTime startTime = DateTime.Now;
            while (length > 0)
            {
                poststream.Write(buffer, 0, length);
                offset += length;
                progressBar.Value = (int)offset;
                TimeSpan span = DateTime.Now - startTime;
                double second = span.TotalSeconds;
                Console.WriteLine("已用时:" + second.ToString("F2") + "秒");
                if (second > 0.1)
                {
                    Console.WriteLine(" 平均速度:" + (offset / 1024 / second).ToString("0.00") + "KB/秒");
                }
                else
                {
                    Console.WriteLine(" 正在连接…");
                }
                Console.WriteLine("已上传:" + (offset * 100.0 / mum).ToString("F2") + "%");
                Console.WriteLine((offset / 1048576.0).ToString("F2") + "M/" + (mum / 1048576.0).ToString("F2") + "M");
                Application.DoEvents();
                length = fs.Read(buffer, 0, buffer.Length);
            }
            poststream.Close();
            if (wc.QueryString.ToString() == "Success")
                return 1;
            else
                return 0;
        }

    }



调用

            OpenFileDialog of = new OpenFileDialog();
            if (of.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = of.FileName;
                UploadFile.Upload_Request("http://localhost:88/Default.aspx",of.FileName, progressBar1);
            }
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,