Saltar al contenido principal

Subir archivos mediante FTP (ftp.upload)

Declaración

resultado_subida, informacion_subida = ftp.upload(ruta_archivo_local, URL [, tiempo_espera_conexion, modo_reanudacion, funcion_callback_bloque, tamano_buffer ])

Parámetros

  • ruta_archivo_local
    Tipo texto; ruta del archivo local
  • URL
    Tipo texto; dirección remota a la que se subirá el archivo; este parámetro contiene la cuenta y la contraseña
  • 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 subir 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 subida actual; si la función devuelve true, se interrumpe esta subida
  • 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_subida
    Tipo booleano; indica si la conexión tiene éxito
  • informacion_subida
    Tipo tabla o texto; si la conexión tiene éxito, devuelve la información de subida 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 subida del segundo valor devuelto es la siguiente
{
resource_size = número total de bytes del archivo local,
start_pos = posición inicial de esta subida dentro del archivo local,
size_upload = número de bytes subidos,
speed_upload = velocidad de esta subida (en bytes por segundo),
}

Esta función es adecuada para subir 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.upload("/var/mobile/1.zip", "ftp://havonz:11%40%[email protected]/1.zip")
if (done) then
sys.alert("上传完成")
else
sys.alert("连接失败:"..info)
end

Ejemplo complejo

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

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