使用System.Net.WebClient类可以从特定的URI请求文件。System.Net.WebClient是一个非常高级的类,它用简单的命令就能实现一些基本操作。下面通过几个实验,说明怎样使用这个类从下载和上传数据。
1、下载文件
使用WebClient类下载文件有两种方法,具体使用哪一种方法取决于文件内容的处理方式。如果需要把文件存储到文件系统上,需要使用DownloadFile()方法,这个方法有两个参数:文件的URI和保存文件的路径:
1: WebClient client = new WebClient(); 2: client.DownloadFile("http://localhost:90/","d:\\123.txt");
如果应用程序需要处理从Web获取的数据,可以使用OpenRead方法。这个方法返回一个Stream引用。使用时可以将这些数据从数据流中提取到内存中直接使用:
1: WebClient client = new WebClient(); 2: Stream strm = client.OpenRead(http://localhost:90/);
WebClient类还有一个OpenWrite()方法,它可以返回一个可写的数据流。别于用户把数据发给URI。这个方法也可以指定把数据发送给主机的方法:Post、Get、PUT等。下边这段代码演示了在网站根目录下创建文件file.txt,并将字符串“Hello World”写入该文件:
1: WebClient client = new WebClient(); 2: Stream stream = client.OpenWrite("http://localhost:90/", "PUT"); 3: StreamWriter sw = new StreamWriter(stream); 4: sw.WriteLine("Hello World!"); 5: sw.Close();
2、上传文件
WebClient类提供了UploadFile()和UploadData()方法。在需要投递HTML窗体或上传整个文件时,就可以使用这两个方法。UploadFile()方法把文件上传到指定的位置。UploadData()方法把作为字节数组提供的二进制数据上传至指定的URI,如下所示:
1: WebClient client = new WebClient(); 2: client.UploadFile("http://localhost:90/", "d:\\123.txt"); 3: 4: FileStream fs = new FileStream("d:\\123..jpg",FileMode.Open); 5: byte[] image = new byte[fs.Length]; 6: fs.Read(image,0,(int)fs.Length); 7: client.UploadData("http://localhost:90/image.jpg", image);
3、使用限制
使用WebClient类有一些功能限制:这个类不能提供身份验证证书,这样在上传数据是就会出现一些问题。大多数站点是不会接收没有身份验证的上传文件的。
尽管可以给请求添加标题信息并检查相应中的标题信息,但这仅仅限制与一般意义上的检查。
这是由于WebClient类是非常一般的类,可以使用任意协议发送和接收响应。他不能处理特定于任何协议的任何特性,例如Cookie等。如果需要使用这些特性,需要使用.net中的WebResponse和WebRequest类。
为基础的一系列类。