zoukankan      html  css  js  c++  java
  • WebClient的使用

    1、下载网页源码:

       private void button1_Click(object sender, EventArgs e)
            {
                string url = textBox1.Text;
                string toUrl = Application.StartupPath + "\" + Path.GetFileName(url);
    
                WebClient wc = new WebClient();
               wc.DownloadDataAsync(new Uri(url));
               wc.DownloadDataCompleted += wc_DownloadDataCompleted;
            }
    
            void wc_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
            {
                if (e.Error == null && e.Cancelled == false)
                    textBox2.Text = Encoding.UTF8.GetString(e.Result);
                else
                    MessageBox.Show(e.Error.Message);
            }

     2、直接下载文件,比较简单,但下载比较伤硬盘:

            private void button1_Click(object sender, EventArgs e)
            {
                string url = textBox1.Text;
                string toUrl = Application.StartupPath + "\" + Path.GetFileName(url);
    
                WebClient wc = new WebClient();
                wc.DownloadFileCompleted += wc_DownloadFileCompleted;
                wc.DownloadFileAsync(new Uri(url), toUrl);
            }
    
            void wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
            {
                MessageBox.Show("下载完成");
            }

    3、利用缓存下载文件,可以更好的保护硬盘

    private void button2_Click(object sender, EventArgs e)
            {
                WebClient wc = new WebClient();
                wc.OpenReadAsync(new Uri(textBox1.Text));
                wc.OpenReadCompleted += wc_OpenReadCompleted;
            }
            async void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
            {
                if (e.Error == null)
                {
                    await SaveFile(e.Result, Application.StartupPath + "\" + Path.GetFileName(textBox1.Text));
                    MessageBox.Show("下载完成");
                }
                else
                {
                    MessageBox.Show(e.Error.Message);
                }
            }
            Task SaveFile(Stream stream, string savepath)
            {
                return Task.Run(() =>
                  {
                      var read = stream;
                      byte[] buf = new byte[8192];
                      int res = 0;
                      FileStream fs = File.Open(savepath, FileMode.OpenOrCreate);
                      using (fs)
                      {
                          while ((res = read.Read(buf, 0, buf.Length)) > 0)
                          {
                              fs.Write(buf, 0, res);
                              fs.Flush();
                          }
                      }
                      read.Close();
                      read.Dispose();
                  });
            }
     

    4、上传文件

    web网站创建一般处理程序  FileHandler:

    public class FileHandler : IHttpHandler
        {
            public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "text/plain";
                try
                {
                    HttpFileCollection files = context.Request.Files;
                    if (files.Count > 0)
                    {
                        files[0].SaveAs(HttpContext.Current.Server.MapPath("files/" + context.Request.QueryString["fname"]));
                        context.Response.Write("save success!");
                    }
                    else
                        context.Response.Write("hello request!");
                }
                catch (Exception ex)
                {
                    context.Response.Write("save error!" + ex.Message);
                }
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }

    由于网站对上传文件大小有限制,修改上传大小可以在ASP.Net在web.config中设置:

    <system.web>
    <httpRuntime maxRequestLength="40960"   //即40MB,1KB=1024
    useFullyQualifiedRedirectUrl="true"
    executionTimeout="6000"
    minFreeThreads="8"
    minLocalRequestFreeThreads="4"
    appRequestQueueLimit="100"
    enableVersionHeader="true"
    />
    </system.web>

    对于webclient,在winform窗体上点击按钮,则把文件上传到上面的服务器网站目录中。

            private void button1_Click(object sender, EventArgs e)
            {
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
    
                    string path = openFileDialog1.FileName;
                    WebClient wc = new WebClient();
                    wc.Credentials = CredentialCache.DefaultCredentials;
                    wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
                    wc.QueryString["fname"] = openFileDialog1.SafeFileName;
                    byte[] fileb = wc.UploadFile(new Uri(@"http://localhost:15993/FileHandler.ashx"), "POST", path);
                    string res = Encoding.UTF8.GetString(fileb);
                    MessageBox.Show(res);
                }
            }

     5、向服务器发送文字

    服务器Test.ashx:

     public class Test : IHttpHandler
        {
    
            public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "text/plain";
    
                int len=context.Request.ContentLength;
                var buf=context.Request.BinaryRead(len);
                var res=Encoding.UTF8.GetString(buf);
    
                context.Response.Write("Result="+res);
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }

    客户机:

            private void button2_Click(object sender, EventArgs e)
            {
                WebClient wc = new WebClient();
                var data = textBox2.Text;
    
                wc.UploadStringAsync(new Uri("http://localhost:15993/Test.ashx"), "POST", data);
                wc.UploadStringCompleted += wc_UploadStringCompleted;
            }
    
            void wc_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)
            {
                MessageBox.Show(e.Result);
            }

     6、上传表单

    服务器端用.net  Controller:

     public ActionResult add(int a,int b)
            {
                int c = a + b;
                return Content(c.ToString()); ;
            }

    客户机:

            private void button3_Click(object sender, EventArgs e)
            {
                var data = "a=1&b=2";
                var postData = Encoding.UTF8.GetBytes(data);
    
                WebClient wc = new WebClient();
                wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
                wc.UploadDataAsync(new Uri("http://localhost:15993/home/add"), "POST", postData);
                wc.UploadDataCompleted += wc_UploadDataCompleted;
            }
    
            void wc_UploadDataCompleted(object sender, UploadDataCompletedEventArgs e)
            {
                MessageBox.Show(Encoding.UTF8.GetString(  e.Result,0,e.Result.Length));
            }
  • 相关阅读:
    module(JS模块系统)
    Sass 教程
    Vue编写的页面部署到springboot网站项目中出现页面加载不全问题
    vue安装教程
    李大庆 软件工程 课后作业(一) 自我介绍
    课后作业(一)
    软工假期预习作业1
    浅谈C#中 加密方式
    C# 日志帮助类
    开荒笔记---UML类图之间的几种关系介绍
  • 原文地址:https://www.cnblogs.com/lunawzh/p/6832282.html
Copyright © 2011-2022 走看看