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,%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.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