Aller au contenu principal

Télécharger un fichier HTTP (http.download)

Déclaration

succèsTéléchargement, informationsTéléchargement = http.download(URL, cheminFichierLocal [, secondesExpirationConnexion, reprise, rappelBloc, tailleTampon ])

Paramètres

  • URL — Adresse du fichier distant
  • cheminFichierLocal — Chemin local de sauvegarde
  • secondesExpirationConnexion — Nombre réel facultatif, délai en secondes ; par défaut 10
  • reprise — Booléen facultatif, prise en charge de la reprise ; true l’active et false la désactive ; par défaut false
  • rappelBloc — Fonction facultative appelée après chaque bloc ; true interrompt le téléchargement ; fonction vide par défaut
  • tailleTampon — Entier facultatif, taille du tampon en octets ; configuration optimale automatique par défaut

Valeur de retour

  • succèsTéléchargement — Booléen, indique si la connexion a réussi
  • informationsTéléchargement — Table ou texte ; informations si la connexion réussit, sinon cause de l’échec

Description

-- Structure du second résultat
{
resource_size = tailleTotaleRessourceDistante,
start_pos = positionDeDépartDeCeTéléchargement,
size_download = tailleTéléchargée,
speed_download = vitesseDeTéléchargement (en octets/seconde),
}

Convient aux 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 s’exécuter.

Exemple simple

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

Exemple avancé

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

Remarque : le code utilise sys.alert et sys.toast.

Référence des erreurs

Requested range was not delivered by the server indique que le serveur ne prend peut-être pas en charge la reprise ; définissez cette option sur false.