HTTP 檔案下載 (http.download)
聲明
下載成敗, 下載資訊 = http.download(URL, 本地檔案路徑 [, 連接超時秒, 斷點續傳模式, 分塊回調函式, 緩衝區尺寸 ])
參數
- URL
文字型,遠端檔案地址 - 本地檔案路徑
文字型,需要儲存到的本地路徑 - 連接超時秒
實數型,可選參數,連接超時時間,單位秒,預設 10 - 斷點續傳模式
布林型,可選參數,是否需要支援斷點續傳,是為 true,否為 false,預設 false - 分塊回調函式
函式型,可選參數,分塊回調函式,每下載完一個分塊都會回調一次該函式,預設 空函式
分塊回調函式第一個參數為目前下載的資訊,回調函式返回 true 則打斷這次下載 - 緩衝區尺寸
整數型,可選參數,緩衝區大小位元組數,預設自動最優設定
回傳值
- 下載成敗
布林型,連接是否成功 - 下載資訊
表型 或 文字型,如果連接成功則返回表型下載資訊,否則返回連接失敗原因文字描述
說明
-- 第二個返回值下載信息結構如下
{
resource_size = 遠端資源總位元組數,
start_pos = 本次下載從資源的開始的位置,
size_download = 本次下載的位元組數,
speed_download = 本次下載的速度 (單位:位元組/秒) ,
}
該函式適合大檔案下載,在傳輸的過程中停止腳本可能會緩慢
該函式可能會讓出,在其返回之前,其他 執行緒 可能會得到運行機會
簡單範例
local done, info = http.download("https://192.168.31.13/1.zip", "/var/mobile/1.zip")
if (done) then
sys.alert("下载完成")
else
sys.alert("连接失败:"..info)
end
複雜範例
local done, info = http.download("https://192.168.31.13/1.zip", "/var/mobile/1.zip", 10, true, function(binfo)
local percent = math.floor(((binfo.start_pos + binfo.size_download) / binfo.resource_size) * 100)
sys.toast("下载进度 "..percent.."%")
end, 4096 * 1024)
--
if (done) then
if (info.start_pos + info.size_download < info.resource_size) then
sys.alert(
"下载中断\n本次下载 "..info.size_download.." 字节"
.."\n从第 "..info.start_pos.." 字节开始下载"
.."\n平均速度为 "..math.floor(info.speed_download/1024).." kB/s"
.."\n还有剩 "..(info.resource_size - (info.start_pos + info.size_download)).." 字节"
)
else
sys.alert(
"下载完成\n本次下载 "..info.size_download.." 字节"
.."\n从第 "..info.start_pos.." 字节开始下载"
.."\n平均速度为 "..math.floor(info.speed_download/1024).." kB/s"
)
end
else
sys.alert("连接失败:"..info)
end
注:上述代碼中使用了非本章函式 sys.alert、sys.toast
錯誤資訊參考
Requested range was not delivered by the server 這個錯誤表示伺服器可能不支援斷點續傳,將斷點續傳選項設為 false 即可