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.