Saltar al contenido principal

Descargar archivos mediante FTP (ftp.download)

Declaración

resultado_descarga, informacion_descarga = ftp.download(URL, ruta_archivo_local [, tiempo_espera_conexion, modo_reanudacion, funcion_callback_bloque, tamano_buffer ])

Parámetros

  • URL
    Tipo texto; dirección del archivo remoto; este parámetro contiene la cuenta y la contraseña
  • ruta_archivo_local
    Tipo texto; ruta local donde se guardará el archivo
  • tiempo_espera_conexion
    Tipo real; parámetro opcional, tiempo de espera de la conexión en segundos; valor predeterminado 10
  • modo_reanudacion
    Tipo booleano; parámetro opcional que indica si se admite la reanudación; true significa que sí y false que no, con false como valor predeterminado
  • funcion_callback_bloque
    Tipo función; parámetro opcional, función de callback por bloques que se llama después de descargar cada bloque; por defecto, una función vacía
    El primer parámetro de la función de callback por bloques contiene la información de la descarga actual; si la función devuelve true, se interrumpe esta descarga
  • tamano_buffer
    Tipo entero; parámetro opcional, tamaño del búfer en bytes; por defecto, la configuración óptima automática

Valores devueltos

  • resultado_descarga
    Tipo booleano; indica si la conexión tiene éxito
  • informacion_descarga
    Tipo tabla o texto; si la conexión tiene éxito, devuelve la información de descarga en forma de tabla; de lo contrario, devuelve una descripción textual del motivo del fallo de conexión

Descripción

-- La estructura de información de descarga del segundo valor devuelto es la siguiente
{
resource_size = número total de bytes del recurso remoto,
start_pos = posición inicial de esta descarga dentro del recurso,
size_download = número de bytes descargados,
speed_download = velocidad de esta descarga (en bytes por segundo),
}

Esta función es adecuada para descargar archivos grandes; detener el script durante la transferencia puede tardar un tiempo
Esta función puede ceder la ejecución; antes de que devuelva el control, otros hilos pueden tener la oportunidad de ejecutarse

Ejemplo sencillo

La cuenta y la contraseña se escriben en la URL; el formato concreto de la URL es el siguiente (los parámetros entre corchetes son opcionales)

ftp://[usuario:contraseña@]dirección[:puerto]/ruta

Si la cuenta o la contraseña contienen @, : o /, estos caracteres se pueden escapar respectivamente como %40, %3A y %2F (para otros caracteres no válidos en una URL se puede usar la codificación porcentual de URL) Por ejemplo, para la cuenta havonz y la contraseña 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

Ejemplo complejo

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

Nota: en el código anterior se usan las funciones sys.alert y sys.toast, que no pertenecen a este capítulo