Aller au contenu principal

Télécharger un fichier par FTP (ftp.download)

Déclaration​

succès du téléchargement, informations de téléchargement = ftp.download(URL, chemin local [, délai de connexion en secondes, reprise, fonction de rappel par bloc, taille du tampon])

Paramètres​

  • URL
    Type texte, adresse du fichier distant ; le compte et le mot de passe sont inclus dans ce paramètre
  • Chemin local
    Type texte, chemin local où enregistrer le fichier
  • Délai de connexion en secondes
    Type réel, paramètre facultatif, délai de connexion en secondes, 10 par défaut
  • Reprise
    Type booléen, paramètre facultatif, indique si la reprise est prise en charge ; true oui, false non, false par défaut
  • Fonction de rappel par bloc
    Type fonction, paramètre facultatif, rappel exécuté après chaque bloc téléchargé, fonction vide par défaut Le premier paramètre contient les informations du téléchargement ; un retour true interrompt le téléchargement
  • Taille du tampon
    Type entier, paramètre facultatif, taille du tampon en octets, configuration optimale automatique par défaut

Valeur de retour​

  • Succès du téléchargement
    Type booléen, indique si la connexion a réussi
  • Informations de téléchargement
    Type table ou texte ; en cas de connexion réussie, informations du téléchargement sous forme de table, sinon description textuelle de l’échec de connexion

Description​

-- Structure des informations de téléchargement du deuxième retour
{
resource_size = nombre total d’octets de la ressource distante,
start_pos = position de départ de ce téléchargement dans la ressource,
size_download = nombre d’octets téléchargés,
speed_download = vitesse de téléchargement (octets/seconde),
}

Cette fonction convient aux téléchargements de gros fichiers ; l’arrêt du script pendant le transfert peut être lent. Cette fonction peut céder l’exécution ; avant son retour, d’autres threads peuvent avoir l’occasion de s’exécuter.

Exemple simple​

Le compte et le mot de passe sont écrits dans l’URL, dont le format est le suivant (les éléments entre crochets sont facultatifs)

ftp://[compte:mot de passe@]adresse[:port]/chemin

Les caractères @, : et / dans le compte ou le mot de passe peuvent être échappés respectivement par %40, %3A et %2F (les autres caractères illégaux dans une URL peuvent utiliser l’encodage en pourcentage). Par exemple, avec le compte havonz et le mot de passe 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

Exemple complexe​

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

Remarque : le code ci-dessus utilise les fonctions hors de ce chapitre sys.alert et sys.toast.