使用http range實現斷點續傳(伺服器端):
;//響應的格式是:
;// 記錄檔案大小
long pastlength =0;
int rangeswitch =0;
long tolength =0;
long contentlength =0;
// 客戶端請求的位元組總量
string rangebytes ="";
// 記錄客戶端傳來的形如「bytes=27000-」或者「bytes=27000-39000」的內容
randomaccessfile raf = null;
// 負責讀取資料
outputstream os = null;
// 寫出資料
outputstream out = null;
// 緩衝
int bsize =
1024
;// 緩衝區大小
byte b=
newbyte
[bsize]
;// 暫存容器
if(request.
getparameter
("showheader"
)!= null)}}
string range = request.
getheader
("range");
// if(range == null)
// range = "bytes=0-";
int responsestatus =
206;
if(range != null && range.
trim()
.length()
>0&&
!"null"
.equals
(range)
)else
}else
/** * servletactioncontext.getresponse().setheader("content-length", new
* long(file.length() - p).tostring());
*/// 來清除首部的空白行
response.
reset()
; response.
setheader
("accept-ranges"
,"bytes");
// 如果是第一次下,還沒有斷點續傳,狀態是預設的 200,無需顯式設定;響應的格式是:http/1.1
// response.addheader("cache-control", "max-age=1296000");
// response.addheader("expires", "fri, 12 oct 2012 03:43:01 gmt");
// response.addheader("last-modified", "tue, 31 jul 2012 03:58:36 gmt");
// response.addheader("connection", "keep-alive");
// response.addheader("etag", downloadfile.getname() + "-" +
// downloadfile.lastmodified());
// response.addheader("last-modified", "thu, 27 sep 2012 05:24:44 gmt");
if(rangeswitch !=0)
case2:
default:}
}else
tryelse
// if("bytes=0-1".equals(range))
response.
setheader
("content-length"
, string.
valueof
(contentlength));
os = response.
getoutputstream()
; out =
newbufferedoutputstream
(os)
; raf =
newrandomaccessfile
(downloadfile,
"r")
;try
case1:
// while ((n = raf.read(b, 0, 1024)) != -1)
break;}
case2:
if(readlength <= contentlength)
break;}
default:}
logger.
info
("content-length為:"
+ contentlength +
";實際輸出位元組數:"
+ outlength)
; out.
flush()
;}catch
(ioexception ie)
}catch
(exception e)
finally
catch
(ioexception e)}if
(raf != null)
catch
(ioexception e)}}
}
實現HTTP斷點續傳
在http協議中,獲取資源可以使用get方法,但在使用get方法指定乙個資源後,會獲取到該資源的所有位元組。在http協議中,提供range屬性,可以指定獲取資源某一段資料。如使用telnet連線www.cz88.net 的80埠 會獲取如下資料 ht失去了跟主機的連線。在獲取的報文中,可以看到co...
symbian實現斷點續傳
斷點續傳的原理 假設伺服器網域名稱為wwww.sjtu.edu.cn,檔名為down.zip。仔細看一下就會發現多了一行range bytes 2000070 這一行的意思就是告訴伺服器down.zip這個檔案從2000070位元組開始傳,前面的位元組不用傳了。伺服器收到這個請求以後,返回的資訊如下...
ASIHTTPRequest實現斷點續傳
asihttprequest可以實現斷點續傳。網上有一些介紹類似使用 request setallowresumeforfiledownloads yes 不過,通過asihttprequest的非同步請求以及delegate還是可以實現斷點續傳的。本文還是以grails編寫斷點續傳伺服器端為例。非...