讓自定義檔案下載支援斷點續傳(HTTP_RANGE Adodb.Stream) (轉)

worldblog發表於2007-12-12
讓自定義檔案下載支援斷點續傳(HTTP_RANGE Adodb.Stream) (轉)[@more@]

自定義基本上用在以下幾處

1.已知型別,如Avi,Doc等如果本地了關聯就會自動在瀏覽器上開啟
2.管理,有時候不是所有的人都允許下載,所以需要在下載的時候進行判斷
3.經常需要將特殊檔案擱到虛擬目錄訪問不到的地方,以及和asa等檔案的下載

大家經常用的是Ado.Stream,但這時就有個缺陷,就是不支援斷點續傳了。
經常看到中是紅臉(即不支援斷點續傳)其實支援斷點續傳也很簡單。如下:
利用讀取HTTP_RANGE,然後對Adodb.Stream進行定位,然後再輸出
(原來程式碼中本來還有Content-Length的設定,理論上應該有,但實踐上可省去)

function dl(f,n)
 on error resume next
 Set S=Create("Adodb.Stream")
 S.Mode=3
 S.Type=1
 S.Open 
 S.LoadFromFile(f)
 if Err.Number>0 then
 Response.Status="404"
 else
 Response.ContentType="application/octet-stream"
 Response.AddHeader "Content-Disposition:","attachment; filename=" & n
 Range=Mid(Request.ServerVariables("HTTP_RANGE"),7)
 if Range="" then
 Response.BinaryWrite(S.Read)
 else
 S.position=Clng(Split(Range,"-")(0))
 Response.BinaryWrite(S.Read)
 End if
 end if
 Response.End
end function

call dl(Server.MapPath("c.avi"),"c.avi")

這時候你會看到紅臉變笑臉了,一般用在大檔案的下載

本地FlashGet測試透過,並用fc比較下載後的檔案和原先的檔案
FC: 找不到相異處


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991605/,如需轉載,請註明出處,否則將追究法律責任。

相關文章