http range實現斷點續傳(斷點續載)

2021-10-23 05:33:01 字數 4043 閱讀 9184

使用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編寫斷點續傳伺服器端為例。非...