メインコンテンツまでスキップ

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 に設定してください