Zum Hauptinhalt springen

FTP-Datei herunterladen (ftp.download)

Deklaration

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

Parameter

  • URL
    Text, Adresse der entfernten Datei; Benutzername und Passwort sind in diesem Parameter enthalten
  • 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

Benutzername und Passwort werden in die URL geschrieben; das genaue URL-Format ist wie folgt (Parameter in eckigen Klammern sind optional).

ftp://[Benutzername:Passwort@]Adresse[:Port]/Pfad

Die Zeichen @, : und / in Benutzername oder Passwort können jeweils mit %40, %3A und %2F escaped werden (andere in URLs unzulässige Zeichen können per URL-Prozentcodierung codiert werden). Beispiel mit Benutzername havonz und Passwort 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

Komplexes Beispiel

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

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