跳至主要內容

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.alertsys.toast

錯誤資訊參考

Requested range was not delivered by the server 這個錯誤表示伺服器可能不支援斷點續傳,將斷點續傳選項設為 false 即可