Android斷點續傳

斷點續傳之前我們首先需要了解http協議

斷點續傳簡單的說,就是接着上一次的已經下載好的位置接着下載文件,如何接着以前已經下載的位置接着下載,這是我們要解決的問題.

http header詳解參考http://www.cnblogs.com/xyxiong/archive/2011/08/19/2145869.html

解釋其中幾個用到的屬性:

Range : 用於客戶端到服務器端的請求,可通過該字段指定下載文件的某一段大小,及其單位。典型的格式如:
Range: bytes=0-499 下載第0-499字節範圍的內容
Range: bytes=500-999 下載第500-999字節範圍的內容
Range: bytes=-500 下載最後500字節的內容
Range: bytes=500- 下載從第500字節開始到文件結束部分的內容

客戶端請求:

httpURLConnection.setRequestProperty(“Range”, “bytes=”+12+”-“);
服務器響應:

Accept-Ranges : 用於服務器端到客戶端的應答,客戶端通過該字段可以判斷服務器是否支持斷點續傳

Accept-Ranges: bytes 表示支持以bytes爲單位進行傳輸。
Accept-Ranges: none 表示不支持

Content-Ranges : 用於服務器端到客戶端的應答,與Accept-Ranges在同一個報文內,通過該字段指定了返回的文件資源的字節範圍。格式如下:

Content-Ranges: bytes 0-500/1234 大小爲1234的文件的第0-500字節範圍的內容
Content-Ranges: bytes 500-1233/1234 大小爲1234字節的文件的第500-結尾範圍的內容

ETag:簡單的說,ETag可以用來標識/保證文件的唯一性或完整性,你可以把它看作是服務器爲某個文件生產的唯一標識值,每次文件有更新該值就會變化。通過這種機制客戶端可以檢查某個文件在斷點續傳(當然它不僅僅用於斷點續傳)的前後是否有所改動:如果ETag改變了就應該重新下載整個文件以保證它的完整性

String etag = httpURLConnection.getHeaderField("ETag");
String acceptRange= httpURLConnection.getHeaderField("Accept-Ranges");
String contentRange = httpURLConnection.getHeaderField("content-range");

知道這些之後就可以通過RandomAccessFile類進行斷點續傳了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章