如果只想从特定的URI请求文件,则使用WebClient,它是最简单的.NET类,它只用一两条命令执行基本操作,.NET FRAMEWORK目前支持以http:、https:、ftp:、和 file: 方案标识符开头的 URI。

WebClient下载文件

使用webclient下载文件有两种方法,具体使用哪一种方法取决于文件内容的处理方式,如果只想把文件保存到磁盘上,使用downloadfile()方法,此方法有两个参数,即请求的uri和请求文件的的数据保存位置。

更常见的是,应用程序需要处理从web站点检索的数据,为此要用到OpenRead方法,此方法返回一个Stream对象,然后,可以Stream对象从数据流提取到内存中。

示例:OpenRead(string uri);

          #region 读取指定uri的html
/// <summary>
/// 读取指定uri的html
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button4_Click(object sender, EventArgs e)
{
WebClient wc = new WebClient();
string uri = "http://127.0.0.1/rss/sina.aspx";
Stream stream = wc.OpenRead(uri);
StreamReader sr = new StreamReader(stream);
string strLine = "";
while ((strLine = sr.ReadLine()) != null)
{
this.listBox1.Items.Add(strLine);
}
sr.Close();
}
#endregion

示例:OpenWriter(string uri,string method);

  #region 打开一个流使用指定的方法将数据写入到uri
/// <summary>
/// 打开一个流使用指定的方法将数据写入到uri
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
WebClient wc = new WebClient();
string uri = "http://192.168.0.35/cims30/rss.txt";
Stream stream = wc.OpenWrite(uri, "PUT");
StreamWriter sw = new StreamWriter(stream);
sw.WriteLine("HelloWorldHelloWorldHelloWorldHelloWorld");
sw.Flush();
sw.Close();
MessageBox.Show("OK");
}
#endregion

openwriter方法返回一个可写的数据流,便于用户把数据发送给uri,可以指定用户把数据发送给主机的方法,默认是post,上例假定0.35的服务器上有一个可写的目录刺马s,这段代码是在该目录下创建rss.txt文件,其内容为“HelloWorldHelloWorldHelloWorldHelloWorld”

WebClient上传文件

WebClient类提供了UploadFile()UploadData()方法,在需要投递HTML窗体或上传整个文件时候,就可以使用这两个方法。Uploadfile()方法把文件上传到指定的位置,其中文件名字已经给出,uploaddata()方法把字节数组提供的二进制数据上传到指定的uri;

示例:

   #region 把本地文件上传到指定uri
/// <summary>
/// 把本地文件上传到指定uri
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
WebClient wc = new WebClient();
string targetPath = "http://127.0.0.1/rss/Data Configuration.zip";
string sourcePath = "d:\\Data Configuration.zip";
this.label1.Text = string.Format("uploading {0} to {1}", targetPath, sourcePath);
byte[] bt = wc.UploadFile(targetPath, "PUT", sourcePath);
MessageBox.Show("OK");
}
#endregion #region 把数据缓冲区上载到指定资源
/// <summary>
/// 把数据缓冲区上载到指定资源
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
WebClient wc = new WebClient();
string targetPath = "http://127.0.0.1/rss/kaifeng.jpg";
string sourcePath = @"C:\test.jpg";
FileStream fs = new FileStream(sourcePath, FileMode.Open, FileAccess.Read);
byte[] bt = new byte[fs.Length];
fs.Read(bt, , bt.Length);
wc.UploadData(targetPath, "PUT", bt);
}
#endregion

webclient功能有限,特别是不能使用身份验证证书,这样,上传数据时候问题出现,现在许多站点都不会接受没有身份验证的上传文件。尽管可以给请求添加标题信息并检查相应中的标题信息,但这仅限于一般意义的检查,对于任何一个协议,webclient没有具体支持,。这是由于webclient是非常一般的类,可以使用任意协议发送请求和接受相应,它不能处理特定于任何协议的任何特性。

-------------------------------------------------------------------------------------------------------------

怀揣着一点点梦想的年轻人
相信技术和创新的力量
喜欢快速反应的工作节奏
-------------------------------------------------------------------------------------------------------------
注:本文转载于http://www.cnblogs.com/hfliyi/archive/2012/08/21/2649892.html,感谢原文作者!

WebClient用法小结(转载)的更多相关文章

  1. Spring mvc中@RequestMapping 6个基本用法小结(转载)

    小结下spring mvc中的@RequestMapping的用法. 1)最基本的,方法级别上应用,例如: @RequestMapping(value="/departments" ...

  2. Java String.split()用法小结(转载)

    在java.lang包中有String.split()方法,返回是一个数组 我在应用中用到一些,给大家总结一下,仅供大家参考: 1.如果用“.”作为分隔的话,必须是如下写法,String.split( ...

  3. C++ typedef用法小结 (转载)

    声明:本文转自charley_yang,点击此处查看原文 第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // ...

  4. 转载:Hadoop排序工具用法小结

    本文转载自Silhouette的文章,原文地址:http://www.dreamingfish123.info/?p=1102 Hadoop排序工具用法小结 发表于 2014 年 8 月 25 日 由 ...

  5. Java返回类型泛型的用法小结

    Java返回类型泛型的用法小结 版权声明:本文为博主原创文章,未经博主允许不得转载. 关于Java泛型的基本用法就不多说了,主要是一个编译期的检查,也避免了我们代码中的强制转换,比较经典的用法有泛型D ...

  6. MVC图片上传详解 IIS (安装SSL证书后) 实现 HTTP 自动跳转到 HTTPS C#中Enum用法小结 表达式目录树 “村长”教你测试用例 引用provinces.js的三级联动

    MVC图片上传详解   MVC图片上传--控制器方法 新建一个控制器命名为File,定义一个Img方法 [HttpPost]public ActionResult Img(HttpPostedFile ...

  7. [No000010]Ruby 中一些百分号(%)的用法小结

    #Ruby 中一些百分号(%)的用法小结 #这篇文章主要介绍了Ruby 中一些百分号(%)的用法小结,需要的朋友可以参考下 what_frank_said = "Hello!"#% ...

  8. C++ typedef用法小结 (※不能不看※)

    C++ typedef用法小结 (※不能不看※) 第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不 ...

  9. 函数fgets和fputs、fread和fwrite、fscanf和fprintf用法小结 (转)

    函数fgets和fputs.fread和fwrite.fscanf和fprintf用法小结 字符串读写函数fgets和fputs 一.读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符 ...

随机推荐

  1. SELinux 引起的 Docker 启动失败

    问题描述 Linux OS 版本 CentOS Linux release 7.2.1511 (Core) 启动Docker service docker start 启动失败信息 原因分析 Erro ...

  2. 20190430-BootstrapのJS插件

    目录 1.引用 2. 内容 1.引用 引用该插件需注意俩点 1.1插件依赖JQ:JQ必须在所有插件之前,bower.json内列出BT所支持的JQ版本(1.9.1-3) BootCDNのJQ    J ...

  3. mysql安装启动 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

    首次安装mysql 启动 mysql -uroot 以下错误: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using ...

  4. extjs--combo动态获取数据

    <!DOCTYPE html> <html> <head> <link href="https://cdnjs.cloudflare.com/aja ...

  5. centos 7 下安装nginx-1.15.7

    安装所需环境 Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 CentOS 7 作为安装环境. 一. gcc 安装安装 nginx 需要先 ...

  6. SVM面经

    原始问题与对偶问题的关系 1,目标函数对原始问题是极大化,对对偶问题则是极小化 2,原始问题目标函数中的收益系数(优化函数中变量前面的系数)是对偶问题约束不等式中的右端常数,而原始问题约束不等式中的右 ...

  7. openstf安装手记

    一款基于nodejs+jade模板开发的手机群控框架,你可以在此基础上拿来测试设备,或者群操作等等. 主要核心技术在于如何在不root的情况下实时流畅录屏,以及远程操作手机. 官方git https: ...

  8. Linux下用tree命令列出树形图

    命令用法: tree 参数: -a 显示所有文件和目录. -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合. -C 在文件和目录清单加上色彩,便于区分各种类型. -d 显示目录名称而非内容 ...

  9. java实现猴子选大王问题(约瑟夫问题)

    题目:m只猴子围成一圈报数,报n的猴子自动离开,然后下一位重新从1开始报数,一直循环,最后剩下的那个猴子就是猴大王,写出程序求出最后是大王的那只猴子最初的位置. package learn; impo ...

  10. ngx.location.capture 只支持相对路径,不能用绝对路径

    ngx.location.capture 是非阻塞的,ngx.location.capture也可以用来完成http请求,但是它只能请求到相对于当前nginx服务器的路径,不能使用之前的绝对路径进行访 ...