07
2014
06

WebClient类的使用:上传文件和下载文件

 


使用System.Net.WebClient类可以从特定的URI请求文件。System.Net.WebClient是一个非常高级的类,它用简单的命令就能实现一些基本操作。下面通过几个实验,说明怎样使用这个类从下载和上传数据。

1、下载文件

使用WebClient类下载文件有两种方法,具体使用哪一种方法取决于文件内容的处理方式。如果需要把文件存储到文件系统上,需要使用DownloadFile()方法,这个方法有两个参数:文件的URI和保存文件的路径:

  WebClient client = new WebClient();
  client.DownloadFile("http://localhost:90/","d:\\123.txt");
 
如果应用程序需要处理从Web获取的数据,可以使用OpenRead方法。这个方法返回一个Stream引用。使用时可以将这些数据从数据流中提取到内存中直接使用:

  WebClient client = new WebClient();
  Stream strm = client.OpenRead(http://localhost:90/);
 
WebClient类还有一个OpenWrite()方法,它可以返回一个可写的数据流。别于用户把数据发给URI。这个方法也可以指定把数据发送给主机的方法:Post、Get、PUT等。下边这段代码演示了在网站根目录下创建文件file.txt,并将字符串“Hello World”写入该文件:

  WebClient client = new WebClient();
  Stream stream = client.OpenWrite("http://localhost:90/", "PUT");
  StreamWriter sw = new StreamWriter(stream);
  sw.WriteLine("Hello World!");
  sw.Close();


2、上传文件

WebClient类提供了UploadFile()和UploadData()方法。在需要投递HTML窗体或上传整个文件时,就可以使用这两个方法。UploadFile()方法把文件上传到指定的位置。UploadData()方法把作为字节数组提供的二进制数据上传至指定的URI,如下所示:

  WebClient client = new WebClient();
  client.UploadFile("http://localhost:90/", "d:\\123.txt");
 
  FileStream fs = new FileStream("d:\\123..jpg",FileMode.Open);
  byte[] image = new byte[fs.Length];
  fs.Read(image,0,(int)fs.Length);
  client.UploadData("http://localhost:90/image.jpg", image);

3、使用限制

使用WebClient类有一些功能限制:这个类不能提供身份验证证书,这样在上传数据是就会出现一些问题。大多数站点是不会接收没有身份验证的上传文件的。

尽管可以给请求添加标题信息并检查相应中的标题信息,但这仅仅限制与一般意义上的检查。

这是由于WebClient类是非常一般的类,可以使用任意协议发送和接收响应。他不能处理特定于任何协议的任何特性,例如Cookie等。如果需要使用这些特性,需要使用.net中的WebResponse和WebRequest类。

 

 

« 上一篇下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。