Aller au contenu principal

Téléverser un fichier par FTP (ftp.upload)

Déclaration

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

Paramètres

  • Chemin local
    Type texte, chemin du fichier local
  • URL
    Type texte, adresse distante de destination ; le compte et le mot de passe sont inclus dans ce paramètre
  • 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éversé, fonction vide par défaut Le premier paramètre contient les informations du téléversement ; un retour true interrompt le téléversement
  • 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éversement
    Type booléen, indique si la connexion a réussi
  • Informations de téléversement
    Type table ou texte ; en cas de connexion réussie, informations du téléversement sous forme de table, sinon description textuelle de l’échec de connexion

Description

-- Structure des informations de téléversement du deuxième retour
{
resource_size = nombre total d’octets du fichier local,
start_pos = position de départ de ce téléversement dans le fichier local,
size_upload = nombre d’octets téléversés,
speed_upload = vitesse de téléversement (octets/seconde),
}

Cette fonction convient aux téléversements 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.upload("/var/mobile/1.zip", "ftp://havonz:11%40%[email protected]/1.zip")
if (done) then
sys.alert("上传完成")
else
sys.alert("连接失败:"..info)
end

Exemple complexe

local done, info = ftp.upload("/var/mobile/1.zip", "ftp://havonz:[email protected]/1.zip", 10, true, function(binfo)
local percent = math.floor(((binfo.start_pos + binfo.size_upload) / binfo.resource_size) * 100)
sys.toast("上传进度 "..percent.."%")
end, 4096 * 1024)
--
if (done) then
if (info.start_pos + info.size_upload < info.resource_size) then
sys.alert(
"上传中断\n本次上传 "..info.size_upload.." 字节"
.."\n从第 "..info.start_pos.." 字节开始上传"
.."\n平均速度为 "..math.floor(info.speed_upload/1024).." kB/s"
.."\n还有剩 "..(info.resource_size - (info.start_pos + info.size_upload)).." 字节"
)
else
sys.alert(
"上传完成\n本次上传 "..info.size_upload.." 字节"
.."\n从第 "..info.start_pos.." 字节开始上传"
.."\n平均速度为 "..math.floor(info.speed_upload/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.