转载:http://blog.csdn.net/kevonz/article/details/5078432

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;namespace The9web.Com
{class UpDownLoadFile{/// <summary>/// WebClient上传文件至服务器(不带进度条)/// </summary>/// <param name="fileNameFullPath">要上传的文件(全路径格式)</param>/// <param name="strUrlDirPath">Web服务器文件夹路径</param>/// <returns>True/False是否上传成功</returns>public bool UpLoadFile(string fileNameFullPath, string strUrlDirPath){//得到要上传的文件文件名string fileName = fileNameFullPath.Substring(fileNameFullPath.LastIndexOf("//") + 1);//新文件名由年月日时分秒及毫秒组成string NewFileName = DateTime.Now.ToString("yyyyMMddhhmmss")+ DateTime.Now.Millisecond.ToString()+ fileNameFullPath.Substring(fileNameFullPath.LastIndexOf("."));//得到文件扩展名string fileNameExt = fileName.Substring(fileName.LastIndexOf(".") + 1);if (strUrlDirPath.EndsWith("/") == false) strUrlDirPath = strUrlDirPath + "/";//保存在服务器上时,将文件改名(示业务需要)strUrlDirPath = strUrlDirPath + NewFileName;// 创建WebClient实例WebClient myWebClient = new WebClient();myWebClient.Credentials = CredentialCache.DefaultCredentials;// 将要上传的文件打开读进文件流FileStream myFileStream = new FileStream(fileNameFullPath, FileMode.Open, FileAccess.Read);BinaryReader myBinaryReader = new BinaryReader(myFileStream);try{byte[] postArray = myBinaryReader.ReadBytes((int)myFileStream.Length);//打开远程Web地址,将文件流写入Stream postStream = myWebClient.OpenWrite(strUrlDirPath, "PUT");if (postStream.CanWrite){postStream.Write(postArray, 0, postArray.Length);}else{//MessageBox.Show("Web服务器文件目前不可写入,请检查Web服务器目录权限设置!","系统提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
                }postStream.Close();//关闭流return true;}catch (Exception exp){//MessageBox.Show("文件上传失败:" + exp.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);return false;}}/// <summary>/// 下载服务器文件至客户端(不带进度条)/// </summary>/// <param name="strUrlFilePath">要下载的Web服务器上的文件地址(全路径 如:http://www.the9web.com/test.rar)</param>/// <param name="Dir">下载到的目录(存放位置,机地机器文件夹)</param>/// <returns>True/False是否上传成功</returns>public bool DownLoadFile(string strUrlFilePath, string strLocalDirPath){// 创建WebClient实例WebClient client = new WebClient();//被下载的文件名string fileName = strUrlFilePath.Substring(strUrlFilePath.LastIndexOf("/"));//另存为的绝对路径+文件名string Path = strLocalDirPath + fileName;try{WebRequest myWebRequest = WebRequest.Create(strUrlFilePath);}catch (Exception exp){MessageBox.Show("文件下载失败:" + exp.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);}try{client.DownloadFile(strUrlFilePath, Path);return true;}catch (Exception exp){MessageBox.Show("文件下载失败:" + exp.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);return false;}}/// <summary>/// 下载带进度条代码(普通进度条)/// </summary>/// <param name="URL">网址</param>/// <param name="Filename">文件名</param>/// <param name="Prog">普通进度条ProgressBar</param>/// <returns>True/False是否下载成功</returns>public bool DownLoadFile(string URL, string Filename, ProgressBar Prog){try{System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL); //从URL地址得到一个WEB请求   System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse(); //从WEB请求得到WEB响应   long totalBytes = myrp.ContentLength; //从WEB响应得到总字节数   Prog.Maximum = (int)totalBytes; //从总字节数得到进度条的最大值   System.IO.Stream st = myrp.GetResponseStream(); //从WEB请求创建流(读)   System.IO.Stream so = new System.IO.FileStream(Filename, System.IO.FileMode.Create); //创建文件流(写)   long totalDownloadedByte = 0; //下载文件大小   byte[] by = new byte[1024];int osize = st.Read(by, 0, (int)by.Length); //读流   while (osize > 0){totalDownloadedByte = osize + totalDownloadedByte; //更新文件大小
                    Application.DoEvents();so.Write(by, 0, osize); //写流   Prog.Value = (int)totalDownloadedByte; //更新进度条   osize = st.Read(by, 0, (int)by.Length); //读流
                }so.Close(); //关闭流st.Close(); //关闭流return true;}catch{return false;}}/// <summary>/// 下载带进度条代码(状态栏式进度条)/// </summary>/// <param name="URL">网址</param>/// <param name="Filename">文件名</param>/// <param name="Prog">状态栏式进度条ToolStripProgressBar</param>/// <returns>True/False是否下载成功</returns>public bool DownLoadFile(string URL, string Filename, ToolStripProgressBar Prog){try{System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL); //从URL地址得到一个WEB请求   System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse(); //从WEB请求得到WEB响应   long totalBytes = myrp.ContentLength; //从WEB响应得到总字节数   Prog.Maximum = (int)totalBytes; //从总字节数得到进度条的最大值   System.IO.Stream st = myrp.GetResponseStream(); //从WEB请求创建流(读)   System.IO.Stream so = new System.IO.FileStream(Filename, System.IO.FileMode.Create); //创建文件流(写)   long totalDownloadedByte = 0; //下载文件大小   byte[] by = new byte[1024];int osize = st.Read(by, 0, (int)by.Length); //读流   while (osize > 0){totalDownloadedByte = osize + totalDownloadedByte; //更新文件大小
                    Application.DoEvents();so.Write(by, 0, osize); //写流   Prog.Value = (int)totalDownloadedByte; //更新进度条   osize = st.Read(by, 0, (int)by.Length); //读流
                }so.Close(); //关闭流   st.Close(); //关闭流   return true;}catch{return false;}}}
}

View Code

WebClient还有一个十分酷的特性,可惜官方帮助没有提及。WebClient可以与浏览器共享缓存文件!具体说来,如果你通过网页浏览已经缓存了某个文件,当你用WebClient下载这个文件时,WebClient会直接从缓存文件中直接读取,不再重新下载。反之亦然,WebClient下载的文件会保存在浏览器缓存目录中,供浏览器和WebClient下次使用。这可是实现silverlight动态下载并缓存的理论基础,十分重要!!
当然有些时候开发者并不想使用缓存文件。例如服务器文件更新了,希望下载最新的文件而不是缓存的文件。这种情况怎么处理呢?有人提出了一个解决办法:因为文件缓存是基于url的,如果在url后面加上一些随机的无意义的字符,例如?o=123,则可绕过缓存。缺点是每次下载都会增加新的缓存文件,浪费空

使用WebClient实现文件下载

http://blog.sina.com.cn/s/blog_6e51df7f0100sw6t.html

使用webclient上传下载实例相关推荐

  1. Linux or unix FTP 上传下载实例

    unix FTP 上传下载实例 vincent 发表于 2007-07-31 16:22:07 命令行方式使用FTP实战练习 简单上传下载实例(/*....*/为注释): 先假设有一FTP服务器,FT ...

  2. kingedit 上传php_php文件上传下载实例(实现最简单的网盘功能)

    本人是一个新手代码狗,第一次发表博客,欢迎大大们指点! 最近手头有一个文件上传下载的案例,跟大家一起分享一下作为一个新手的苦逼成长历程! 话不多说,先上代码: 一:这个是一个文件上传的html页面,小 ...

  3. Spring MVC文件上传下载实例

    工程目录: 导入jar: controllers.FileControler.java package controllers;import java.io.File; import java.io. ...

  4. Struts2中文件上传下载实例

    1.单文件上传 1 jsp页面: 2 3 <!-- 单文件上传 --> 4 <form action="Fileupload.action" method=&qu ...

  5. java大文件解析_java大文件(百M以上)的上传下载实例解析

    javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 Save 改进后的代码不需要for ...

  6. Silverlight使用webClient上传下载

    http://www.silverlight.net/archives/videos/openfiledialog-and-file-upload,视频地址, http://www.silverlig ...

  7. WebClient上传文件至服务器和下载服务器文件至客户端

    #region WebClient上传文件至服务器 /// <summary> /// WebClient上传文件至服务器 /// </summary> /// <par ...

  8. JavaWeb实现文件上传下载功能实例解析

    转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...

  9. python上传本地文件到ftp_python实现的简单FTP上传下载文件实例

    本文实例讲述了python实现的简单FTP上传下载文件的方法.分享给大家供大家参考.具体如下: python本身自带一个FTP模块,可以实现上传下载的函数功能. #!/usr/bin/env pyth ...

  10. 上传下载文件实例(vsftp服务器+nginx)

    上传下载文件实例(vsftp服务器+nginx) 页面(上传+下载) <form action="/pic/upload" enctype="multipart/f ...

最新文章

  1. 0012-求滑动距离
  2. (8) Xamarin使用Jar檔
  3. 劫持 function_core.php,function_core.php文件中常用函数
  4. IE新0day漏洞(979352)(又称极光零日漏洞)***将扩散
  5. jquery数据折叠_通过位折叠缩小大数据
  6. 包装类型与基本类型的装箱与拆箱操作
  7. 最短路dijkstra算法详解_图论系列开始填坑--Dijkstra,单源最短路
  8. Qt::QWidget 无默认标题栏边框的拖拽修改大小方式
  9. 两波形相位差的计算值_变压器损耗计算公式
  10. 苏轼 天涯 青砚1989
  11. np.ones(),np.zeros(), np.empty(),np.full(),np.ones_like() 基本用法
  12. android stop 服务,当调用stopService方法时服务不会停止
  13. 安全测试:听云短信接口安全测试,你的短信接口到底有多危险,可能瞬间损失过万,短信接口防盗刷测试
  14. Java Ucase_JSP页面中的变量和方法声明(Declaration)、表达式(Expression)和Java程序片(Scriptlet)统称为JSP标记。...
  15. 7-67 计算年龄 (10 分)
  16. 计算机控制系统的输入输出信号,工业控制系统的输入与输出信号
  17. 操作系统课程设计-进程管理
  18. 【ios】Settings 设置项
  19. 嵌入式软件开发学习 工程师要掌握的基本技能
  20. 实战:如何优化宝贝标题?

热门文章

  1. C#进制转换(二进制转十进制 十进制转16进制等)
  2. 判断DataTable为空,获取值,查询数据,datarow转datatable
  3. 用java语言写网上购物的语句_用java代码写一个简单的网上购物车程序
  4. 提升技能必备网站(不定时更新)
  5. 穿越者的真正优势是人才
  6. 编程基本功:写一个JAVA版的对象回收利用机制
  7. 管理感情:工作犯错了,不要狡辩,不要把错误推到别人身上
  8. eclipse ARM/AARCH64版本下载
  9. libgsm.a relocation R_X86_64_PC32 can not be used when making a shared object; recompile with -fPIC
  10. grep搜索字串包含特殊字符怎么办