现在的位置: 首页 > 综合 > 正文

WebClient的一些简单应用

2013年12月05日 ⁄ 综合 ⁄ 共 8525字 ⁄ 字号 评论关闭

      话不多说了,因为要项目加入移动无线城市的头和尾,只能用这个方法.

     

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using System.IO;
using System.Text;

namespace WebTest
{
    public partial class WebClientTest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //下载图片用
            //string Url = "http://wap.hljwxcs.com/mycity/skin/revision/wap/default/default/320/images/logo.gif";

            //对于文件的读和下载数据用
            //string Url = "http://wap.hljwxcs.com/include/header.do";

            //下载音频文件用
            //string Url = "http://zhangmenshiting.baidu.com/data2/music/1575880/15758731352678461.mp3?xcode=aa8b40c67742d453577895e58b3b93ef";

            //测试写操作,如:openWrite
            //string Url = "http://localhost/aa.txt";

            //测试文件上传用,此文件为接收文件,必写,否则上传无法接收
            string Url = "http://localhost/uploadFile.aspx";
            OperUploadFileAsync(Url);
        }

        /// <summary>
        /// DownloadData同步下载数据
        /// </summary>
        /// <param name="Url"></param>
        public void OperaDownloadData(string Url)
        {
            WebClient _client = new WebClient();

            //DownloadData的使用方法
            byte[] mybyte = _client.DownloadData(new Uri(Url, UriKind.RelativeOrAbsolute));

            string stream = System.Text.Encoding.UTF8.GetString(mybyte);

            Response.Write(mybyte.Length + "----");

            Response.Write(stream);
        }

        /// <summary>
        /// DownloadDataAsync异步下载数据
        /// </summary>
        /// <param name="Url"></param>
        public void OperaDownloadDataAsync(string Url)
        {
            WebClient _client = new WebClient();
            //DownloadDataAsync是DownloadData的异步操作
            _client.DownloadDataCompleted += new DownloadDataCompletedEventHandler(DownloadDataCallback);
            _client.DownloadDataAsync(new Uri(Url, UriKind.Absolute));
        }


        //DownloadDataAsync异步操作
        public void DownloadDataCallback(object sender,DownloadDataCompletedEventArgs e)
        {
            if (e.Result.Length > 0 && e.Error==null && e.Cancelled==false)
            {
                this.Label1.Visible = false;
                Response.Write(System.Text.Encoding.UTF8.GetString(e.Result));              
            }
        }


        /// <summary>
        /// DownloadString下载数据
        /// </summary>
        /// <param name="Url"></param>
        public void OperDownloadString(string Url)
        {
            WebClient _client = new WebClient();
            string Tempstr = _client.DownloadString(Url);
            Tempstr = System.Text.Encoding.UTF8.GetString(System.Text.Encoding.Default.GetBytes(Tempstr));
            Response.Write(Tempstr);
        }


        /// <summary>
        /// DownloadStringAsync异步下载数据
        /// </summary>
        /// <param name="Url"></param>
        public void OperDownloadStringAsync(string Url)
        {
            WebClient _client = new WebClient();

            _client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(DownloadStringCompleted);
            _client.DownloadStringAsync(new Uri(Url, UriKind.RelativeOrAbsolute));
        }

        /// <summary>
        /// DownloadStringAsync异步下载数据--完成方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            //throw new NotImplementedException();
            if (e.Result.Length > 0 && e.Error == null && e.Cancelled == false)
            {
                Response.Clear();
                this.Label1.Visible = false;
                Response.Write(e.Result);
            }
        }


        /// <summary>
        /// DownloadFile下载文件
        /// 此处可以下载图片
        /// 如果想下载大的文件,音频或是视频,可以使用此方法的异步.因为同步页面停留时间太长
        /// </summary>
        /// <param name="Url"></param>
        public void OperDownloadFile(string Url)
        {
            WebClient _client = new WebClient();

            //下载之后的文件名字
            string Path = Server.MapPath("1.mp3");

            _client.DownloadFile(Url, Path);
        }


        /// <summary>
        /// DownloadFileAsync异步下载文件,下载时间还是很长
        /// 会出现报401错误的,这个需要你去设置IIS的权限了
        /// </summary>
        /// <param name="Url"></param>
        public void OperDownloadFileAsync(string Url)
        {
            WebClient _client = new WebClient();
            string Path = Server.MapPath("1.mp3");
            _client.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(DownloadFileCompleted);
            _client.DownloadFileAsync(new Uri(Url, UriKind.RelativeOrAbsolute), Path);
        }

        /// <summary>
        /// 完成异步下载文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {
            //throw new NotImplementedException();
            if (e.Error == null && e.Cancelled == false)
            {
                this.Label1.Text = "下载成功!";
            }
            else
            {
                this.Label1.Text = "下载失败,原因:" + e.Error.Message; 
                
            }
        }

        /// <summary>
        /// OpenRead读取页面,它的功能与DownloadData相似,都是抓取页面信息.没看出有什么不同.
        /// 难道说不同的是一个取回的是字节,一个是数据流吗???
        /// </summary>
        /// <param name="Url"></param>
        public void OperOpenRead(string Url)
        {
            WebClient _client = new WebClient();

            Stream stream = _client.OpenRead(Url);

            StreamReader sr = new StreamReader(stream);

            Response.Write(sr.ReadToEnd());
        }

        /// <summary>
        /// OpenWriteAsync异步读取页面.功能同上
        /// </summary>
        /// <param name="Url"></param>
        public void OperOpenReadAsync(string Url)
        {
            WebClient _client = new WebClient();

            _client.OpenReadCompleted += new OpenReadCompletedEventHandler(OpenReadCompleted);
            _client.OpenReadAsync(new Uri(Url));
        }

        /// <summary>
        /// 异步操作结果
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            //throw new NotImplementedException();
            if (e.Error == null  && e.Cancelled == false)
            {
                Stream stream = e.Result;
                StreamReader sr = new StreamReader(stream);
                Response.Write(sr.ReadToEnd());
            }
        }


        /// <summary>
        /// 对URI的文件进写操作,一般来说都不好用,会报远程服务器返回错误: (405) 不允许的方法
        /// 因为现在的网站管理员不会把IIS的权限开得太大.个人感觉这个功能,没有什么用
        /// 它有几个重载的方法,后面跟的一个string主要是让你来选择是post方式还是put方式进行写
        /// </summary>
        /// <param name="Url"></param>
        public void OperOpenWrite(string Url)
        {
            WebClient _client = new WebClient();

            byte[] postArray = System.Text.Encoding.UTF8.GetBytes("这是能显示出来吗!");

            Stream stream = _client.OpenWrite(Url,"PUT");

            stream.Write(postArray, 0, postArray.Length);

            stream.Close();            
        }

        /// <summary>
        /// 同上,写操作的异步方法
        /// </summary>
        /// <param name="Url"></param>
        public void OperOpenWriteAsync(string Url)
        {
            WebClient _client = new WebClient();

            _client.OpenWriteCompleted += new OpenWriteCompletedEventHandler(OpenWriteCompleted);

            _client.OpenWriteAsync(new Uri(Url));
        }

        /// <summary>
        /// 异步完成操作
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void OpenWriteCompleted(object sender, OpenWriteCompletedEventArgs e)
        {
            //throw new NotImplementedException();
            byte[] postArray = System.Text.Encoding.UTF8.GetBytes("这是能显示出来吗!");

            Stream stream = e.Result;

            stream.Write(postArray, 0, postArray.Length);

            stream.Close();  
        }


        /// <summary>
        /// 上传数据,此方法可以有二个功能,一个是上传一些数据还有一个就是可以上传图片或是文本
        /// 这个例子是上传一个字符串数据,这种方法,在很多情况下用来做自动提交用.
        /// </summary>
        /// <param name="Url"></param>
        public void OperUploadData(string Url)
        {
            WebClient _client = new WebClient();

            string postData = "Username=admin&Password=admin";

            // 注意这种拼字符串的ContentType 
            _client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");

            // 转化成二进制数组 
            byte[] byteArray = Encoding.ASCII.GetBytes(postData);

            // 上传数据,并获取返回的二进制数据. 
            byte[] responseArray = _client.UploadData(Url, "POST", byteArray);  

        }


        /// <summary>
        /// 此方法与上面一样,这里只是做了一个图片上传的功能
        /// 你需要设置IIS等,不然会报405错误.我一直没调试成功
        /// </summary>
        /// <param name="Url"></param>
        /// <param name="FileName"></param>
        public void OperUploadData(string Url, string FileName)
        {
            WebClient _client = new WebClient();

            byte[] postByte = File.ReadAllBytes(@"E:\a.jpg");

            _client.UploadData(Url, postByte);
        }

        /// <summary>
        /// 异步上传数
        /// </summary>
        /// <param name="Url"></param>
        public void OperUploadDataAsync(string Url)
        {
            WebClient _client = new WebClient();

            _client.UploadDataCompleted += new UploadDataCompletedEventHandler(UploadDataCompleted);

            byte[] postByte = File.ReadAllBytes(@"E:\a.jpg");

            _client.UploadDataAsync(new Uri(Url), postByte);
        }

        /// <summary>
        /// 完成异步的方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void UploadDataCompleted(object sender, UploadDataCompletedEventArgs e)
        {
            //throw new NotImplementedException();
            if (e.Error == null && e.Cancelled == false)
            {
                Response.Write(System.Text.Encoding.UTF8.GetString(e.Result));
            }
        }


        /// <summary>
        /// 文件上传方法,此方法需要一个配套的页面,才能正常下载,URL的地址你要指向这个配套的页面
        /// </summary>
        /// <param name="Url"></param>
        public void OperUploadFile(string Url)
        {
            WebClient _client = new WebClient();

            string FileName = @"E:\1.jpg";

            _client.UploadFile(Url,FileName);
        }


        /// <summary>
        /// 异步操作文件上传
        /// </summary>
        /// <param name="Url"></param>
        public void OperUploadFileAsync(string Url)
        {
            WebClient _client = new WebClient();

            _client.UploadFileCompleted += new UploadFileCompletedEventHandler(_client_UploadFileCompleted);

            string FileName = @"E:\1.jpg";

            _client.UploadFileAsync(new Uri(Url), FileName);

        }

        void _client_UploadFileCompleted(object sender, UploadFileCompletedEventArgs e)
        {
            //throw new NotImplementedException();

            if (e.Error == null && e.Cancelled == false)
            {
                Response.Write("上传完成");
            }
        }

        
    }
}

下面是给出的uploadFile.aspx文件

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="uploadFile.aspx.cs" Inherits="WebTest.uploadFile" %>
<%@ Import Namespace="System"%>
<%@ Import Namespace="System.IO"%>
<%@ Import Namespace="System.Net"%>
<%@ Import NameSpace="System.Web"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<Script language="C#" runat="server">
void Page_Load(object sender, EventArgs e) {
	
	foreach(string f in Request.Files.AllKeys) {
		HttpPostedFile file = Request.Files[f];
        file.SaveAs(Server.MapPath("/" + file.FileName));
	}	
}

</Script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
    
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>
    </form>
</body>
</html>

抱歉!评论已关闭.