要实现断点续传下载文件,首先要了解断点续传的原理。断点续传其实就是在上一次下载断开的位置开始继续下载,HTTP协议中,可以在请求报文头中加入Range段,来表示客户机希望从何处继续下载。
这是一个普通的下载请求:
1
2
3
4
5
6
7
8
|
GET /test.txt HTTP/1.1
Accept:*/*
Referer:http:
//192.168.1.96
Accept-Language:zh-cn
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.2;.NET CLR 2.0.50727)
Host:192.168.1.96
Connection:Keep-Alive
|
这表示从1024字节开始断点续传(加入了Range:bytes=1024-):
1
2
3
4
5
6
7
8
9
|
GET /test.txt HTTP/1.1
Accept:*/*
Referer:http:
//192.168.1.96
Accept-Language:zh-cn
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.2;.NET CLR 2.0.50727)
Host:192.168.1.96
Range:bytes=1024-
Connection:Keep-Alive
|
C#主要代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#region 以断点续传方式下载文件
/// <summary>
/// 以断点续传方式下载文件
/// </summary>
/// <param name="strFileName">下载文件的保存路径</param>
/// <param name="strUrl">文件下载地址</param>
public
void
DownloadFile(
string
strFileName,
string
strUrl)
{
//打开上次下载的文件或新建文件
long
SPosition = 0;
FileStream FStream;
if
(File.Exists(strFileName))
{
FStream = File.OpenWrite(strFileName);
SPosition = FStream.Length;
FStream.Seek(SPosition, SeekOrigin.Current);
//移动文件流中的当前指针
}
else
{
FStream =
new
FileStream(strFileName, FileMode.Create);
SPosition = 0;
}
try
{
HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(strUrl);
if
(SPosition > 0)
myRequest.AddRange((
int
)SPosition);
//设置Range值
//向服务器请求,获得服务器的回应数据流
Stream myStream = myRequest.GetResponse().GetResponseStream();
byte
[] btContent =
new
byte
[512];
int
intSize = 0;
intSize = myStream.Read(btContent, 0, 512);
while
(intSize > 0)
{
FStream.Write(btContent, 0, intSize);
intSize = myStream.Read(btContent, 0, 512);
}
FStream.Close();
myStream.Close();
//文件下载完成
}
catch
{
FStream.Close();
}
}
#endregion
|
没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。
本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/6147157.html
,如需转载请自行联系原作者