跳至主要內容

FTP 檔案下載 (ftp.download)

聲明

下載成敗, 下載資訊 = ftp.download(URL, 本地檔案路徑 [, 連接超時秒, 斷點續傳模式, 分塊回調函式, 緩衝區尺寸 ])

參數

  • URL
    文字型,遠端檔案地址,帳號及密碼被包含在這一參數中
  • 本地檔案路徑
    文字型,需要儲存到的本地路徑
  • 連接超時秒
    實數型,可選參數,連接超時時間,單位秒,預設 10
  • 斷點續傳模式
    布林型,可選參數,是否需要支援斷點續傳,是為 true,否為 false,預設 false
  • 分塊回調函式
    函式型,可選參數,分塊回調函式,每下載完一個分塊都會回調一次該函式,預設 空函式
    分塊回調函式第一個參數為目前下載的資訊,回調函式返回 true 則打斷這次下載
  • 緩衝區尺寸
    整數型,可選參數,緩衝區大小位元組數,預設自動最優設定

回傳值

  • 下載成敗
    布林型,連接是否成功
  • 下載資訊
    表型 或 文字型,如果連接成功則返回表型下載資訊,否則返回連接失敗原因文字描述

說明

-- 第二個返回值下載信息結構如下
{
resource_size = 遠端資源總位元組數,
start_pos = 本次下載從資源的開始的位置,
size_download = 本次下載的位元組數,
speed_download = 本次下載的速度 (單位:位元組/) ,
}

該函式適合大檔案下載,在傳輸的過程中停止腳本可能會緩慢
該函式可能會讓出,在其返回之前,其他 執行緒 可能會得到運行機會

簡單範例

帳號密碼寫在 URL 中,具體 URL 格式如下 (中括號內是可選參數)

ftp://[帳號:密碼@]地址[:連接埠]/路徑

帳號或密碼中包含 @:/ 這三個字元可分別用 %40%3A%2F 轉義(其他在 URL 中非法的字元可使用 URL 百分號編碼) 例如帳號 havonz、密碼 11@@22,範例如下:

local done, info = ftp.download("ftp://havonz:11%40%[email protected]/1.zip", "/var/mobile/1.zip")
if (done) then
sys.alert("下载完成")
else
sys.alert("连接失败:"..info)
end

複雜範例

local done, info = ftp.download("ftp://havonz:[email protected]/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