跳至主要內容

FTP 檔案上傳 (ftp.upload)

聲明

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

參數

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

回傳值

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

說明

-- 第二個返回值上傳信息結構如下
{
resource_size = 本地檔案總位元組數,
start_pos = 本次上傳從本地檔案的開始的位置,
size_upload = 本次上傳的位元組數,
speed_upload = 本次上傳的速度 (單位:位元組/) ,
}

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

簡單範例

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

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

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

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

複雜範例

local done, info = ftp.upload("/var/mobile/1.zip", "ftp://havonz:[email protected]/1.zip", 10, true, function(binfo)
local percent = math.floor(((binfo.start_pos + binfo.size_upload) / binfo.resource_size) * 100)
sys.toast("上传进度 "..percent.."%")
end, 4096 * 1024)
--
if (done) then
if (info.start_pos + info.size_upload < info.resource_size) then
sys.alert(
"上传中断\n本次上传 "..info.size_upload.." 字节"
.."\n从第 "..info.start_pos.." 字节开始上传"
.."\n平均速度为 "..math.floor(info.speed_upload/1024).." kB/s"
.."\n还有剩 "..(info.resource_size - (info.start_pos + info.size_upload)).." 字节"
)
else
sys.alert(
"上传完成\n本次上传 "..info.size_upload.." 字节"
.."\n从第 "..info.start_pos.." 字节开始上传"
.."\n平均速度为 "..math.floor(info.speed_upload/1024).." kB/s"
)
end
else
sys.alert("连接失败:"..info)
end

:上述代碼中使用了非本章函式 sys.alertsys.toast