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,%3Ay%2F(para otros caracteres no válidos en una URL se puede usar la codificación porcentual de URL) Por ejemplo, para la cuentahavonzy la contraseña11@@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