怎么实现下载 实现下载 暂停 又开始下载
2012-03-12 12:37
134 查看
暂停下载需要服务器的支持。一些http服务器支持分块传输,否则无法实现。
原理是首先获得文件大小,在本地磁盘上建立同样大小的空白文件。然后分块从服务器中下载并填充它们,直到全部完成。
http://www.codeproject.com/Articles/21053/MyDownloader-A-Multi-thread-C-Segmented-Download-M
///
c#,.net 下载文件 ///
</summary>
///
<param name="URL">下载文件地址</param>
///
///
<param name="Filename">下载后的存放地址</param>
///
<param name="Prog">用于显示的进度条</param>
///
public
void DownloadFile(string
URL, string filename, System.Windows.Forms.ProgressBar
prog, System.Windows.Forms.Label label1) { float
percent =
0;
try { System.Net.HttpWebRequest Myrq
= (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL);
System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
long totalBytes
= myrp.ContentLength;
if (prog
!=
null) { prog.Maximum
= (int)totalBytes;
} System.IO.Stream st = myrp.GetResponseStream(); 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; System.Windows.Forms.Application.DoEvents();
so.Write(by,
0, osize);
if (prog
!=
null) { prog.Value
= (int)totalDownloadedByte;
} osize = st.Read(by,
0, (int)by.Length);
percent = (float)totalDownloadedByte
/ (float)totalBytes
*
100; label1.Text
=
"当前补丁下载进度"
+ percent.ToString()
+
"%";
System.Windows.Forms.Application.DoEvents(); //必须加注这句代码,否则label1将因为循环执行太快而来不及显示信息
} so.Close(); st.Close(); } catch (System.Exception)
{ throw; } } }}
暂停就是:
1、客户端记录当前下载位置;
2、客户端停止下载,关闭流;
3、服务器端会出现异常,没关系,结束发送线程就是了。
继续就是:
1、客户端请求发送文件,并给出起始位置;
2、服务器端读取文件,并从起始位置开始发送。
so.Seek(0, SeekOrigin.Begin);//设置当前流的位置 跳过已经下载的
while (osize != (-1)&&isStop!=true) //isStop初始化为false,当我触发“暂停”按钮时执行isStop=true; 通过判断isStop的值来中断下载流。
http://download.csdn.net/detail/yes16ws/4124161
原理是首先获得文件大小,在本地磁盘上建立同样大小的空白文件。然后分块从服务器中下载并填充它们,直到全部完成。
http://www.codeproject.com/Articles/21053/MyDownloader-A-Multi-thread-C-Segmented-Download-M
///
c#,.net 下载文件 ///
</summary>
///
<param name="URL">下载文件地址</param>
///
///
<param name="Filename">下载后的存放地址</param>
///
<param name="Prog">用于显示的进度条</param>
///
public
void DownloadFile(string
URL, string filename, System.Windows.Forms.ProgressBar
prog, System.Windows.Forms.Label label1) { float
percent =
0;
try { System.Net.HttpWebRequest Myrq
= (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL);
System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();
long totalBytes
= myrp.ContentLength;
if (prog
!=
null) { prog.Maximum
= (int)totalBytes;
} System.IO.Stream st = myrp.GetResponseStream(); 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; System.Windows.Forms.Application.DoEvents();
so.Write(by,
0, osize);
if (prog
!=
null) { prog.Value
= (int)totalDownloadedByte;
} osize = st.Read(by,
0, (int)by.Length);
percent = (float)totalDownloadedByte
/ (float)totalBytes
*
100; label1.Text
=
"当前补丁下载进度"
+ percent.ToString()
+
"%";
System.Windows.Forms.Application.DoEvents(); //必须加注这句代码,否则label1将因为循环执行太快而来不及显示信息
} so.Close(); st.Close(); } catch (System.Exception)
{ throw; } } }}
暂停就是:
1、客户端记录当前下载位置;
2、客户端停止下载,关闭流;
3、服务器端会出现异常,没关系,结束发送线程就是了。
继续就是:
1、客户端请求发送文件,并给出起始位置;
2、服务器端读取文件,并从起始位置开始发送。
so.Seek(0, SeekOrigin.Begin);//设置当前流的位置 跳过已经下载的
while (osize != (-1)&&isStop!=true) //isStop初始化为false,当我触发“暂停”按钮时执行isStop=true; 通过判断isStop的值来中断下载流。
http://download.csdn.net/detail/yes16ws/4124161
相关文章推荐
- Unity中游戏暂停和开始怎么实现?
- Unity中游戏暂停和开始怎么实现?
- Android通过子线程和handler实现倒计时,可以开始暂停倒计时
- Android Handler和ProgressBar实现进度条的开始,暂停,停止,后退和循环
- C#怎么实现文件下载功能
- [软件使用]DownthemALL选择下载链接后显示暂停,不会自动开始下载的问题
- C#中实现暂停下载文件和恢复下载文件
- JavaScript实现轮播图,鼠标移入暂停播放,鼠标移除开始播放
- C#怎么实现文件下载功能的四种方法
- OKHttp3实现文件下载,断点下载,暂停下载
- Cocos2d-x简单游戏<植物大战僵尸>代码实现|第一部分:开始场景<后续会提供源码下载链接>
- Java实现多线程断点下载(下载过程中可以暂停)
- VC++/MFC怎么实现局域网里下载FTP服务器上的文件?
- UrlDownloadtoFile文件下载,进度条,下载暂停,停止的简单实现
- Handler和ProgressBar实现进度条的开始,暂停,停止,后退和循环
- Java实现多线程断点下载实例代码(下载过程中可以暂停)
- C#怎么实现文件下载功能的四种方法
- 多线程断点下载(开始下载,暂停下载,百分比进度条)
- android开发进行自动更新时怎么下载软件到手机内存,显示实现下载到SD卡了
- 怎么实现NPOI导出excel保存到服务器上,然后返回文件地址下载?