Zum Hauptinhalt springen

HTTP-Datei herunterladen (http.download)

Deklaration

Download_erfolgreich, Downloadinformationen = http.download(URL, Lokaler_Dateipfad [, Verbindungs-Timeout_in_Sekunden, Fortsetzungsmodus, Block-Callback, Puffergröße ])

Parameter

  • URL
    Text, Adresse der entfernten Datei
  • Lokaler_Dateipfad
    Text, lokaler Pfad zum Speichern
  • Verbindungs-Timeout_in_Sekunden
    Reelle Zahl, optionaler Parameter, Verbindungs-Timeout in Sekunden, standardmäßig 10
  • Fortsetzungsmodus
    Boolescher Wert, optionaler Parameter, ob die Fortsetzung unterbrochener Downloads unterstützt werden soll; true bedeutet ja, false bedeutet nein, standardmäßig false
  • Block-Callback
    Funktion, optionaler Parameter; wird nach dem Download jedes Blocks einmal aufgerufen, standardmäßig eine leere Funktion
    Der erste Parameter des Block-Callbacks enthält die aktuellen Downloadinformationen. Gibt der Callback true zurück, wird dieser Download unterbrochen
  • Puffergröße
    Ganzzahl, optionaler Parameter, Puffergröße in Bytes, standardmäßig automatisch optimale Konfiguration

Rückgabewerte

  • Download_erfolgreich
    Boolescher Wert, ob die Verbindung erfolgreich war
  • Downloadinformationen
    Tabelle oder Text; bei erfolgreicher Verbindung eine Tabelle mit Downloadinformationen, andernfalls eine Textbeschreibung des Verbindungsfehlers

Hinweise

-- Die Struktur der Downloadinformationen im zweiten Rückgabewert sieht wie folgt aus
{
resource_size = Gesamtzahl der Bytes der entfernten Ressource,
start_pos = Startposition dieses Downloads in der Ressource,
size_download = Anzahl der Bytes dieses Downloads,
speed_download = Geschwindigkeit dieses Downloads (in Bytes/Sekunde),
}

Diese Funktion eignet sich für große Dateidownloads; das Stoppen des Skripts während der Übertragung kann langsam sein.
Diese Funktion kann die Ausführung abgeben; vor ihrer Rückgabe können andere Threads ausgeführt werden.

Einfaches Beispiel

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

Komplexes Beispiel

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

Hinweis: Der obige Code verwendet die Funktionen sys.alert und sys.toast aus anderen Kapiteln.

Referenz für Fehlermeldungen

Requested range was not delivered by the server Dieser Fehler bedeutet, dass der Server die Fortsetzung unterbrochener Downloads möglicherweise nicht unterstützt. Setzen Sie die Option für die Fortsetzung auf false.