Saltar al contenido principal

Descargar un archivo HTTP (http.download)

Declaración

éxito_descarga, información_descarga = http.download(URL, ruta_archivo_local [, segundos_de_espera_de_conexión, modo_reanudación, función_de_retorno_por_bloque, tamaño_búfer ])

Parámetros

  • URL
    Tipo texto; dirección del archivo remoto
  • Ruta del archivo local
    Tipo texto; ruta local donde se debe guardar
  • Segundos de espera de conexión
    Tipo real, parámetro opcional; tiempo de espera de la conexión, en segundos; valor predeterminado 10
  • Modo de reanudación
    Tipo booleano, parámetro opcional; indica si se admite la reanudación de descargas, true sí y false no; valor predeterminado false
  • Función de retorno por bloque
    Tipo función, parámetro opcional; función de retorno por bloque, que se llama una vez después de descargar cada bloque; función vacía de forma predeterminada
    El primer parámetro de la función de retorno por bloque es la información de la descarga actual; si la función devuelve true, se interrumpe esta descarga
  • Tamaño del búfer
    Tipo entero, parámetro opcional; tamaño del búfer en bytes; configuración automática óptima de forma predeterminada

Valor devuelto

  • Éxito de la descarga
    Tipo booleano; indica si la conexión tuvo éxito
  • Información de la descarga
    Tipo tabla o texto; si la conexión tiene éxito, devuelve una tabla con la información de la descarga; de lo contrario, devuelve la descripción textual del motivo del fallo de conexión

Descripción

-- La estructura de la información de descarga del segundo valor devuelto es la siguiente
{
resource_size = total_de_bytes_del_recurso_remoto,
start_pos = posición_desde_la_que_comienza_esta_descarga_en_el_recurso,
size_download = cantidad_de_bytes_descargados_en_esta_descarga,
speed_download = velocidad_de_esta_descarga (unidad: bytes/segundo),
}

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

Ejemplo sencillo

local done, info = http.download("https://192.168.31.13/1.zip", "/var/mobile/1.zip")
if (done) then
sys.alert("下载完成")
else
sys.alert("连接失败:"..info)
end

Ejemplo complejo

local done, info = http.download("https://192.168.31.13/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: el código anterior utiliza las funciones sys.alert y sys.toast, que no pertenecen a este capítulo

Referencia de mensajes de error

Requested range was not delivered by the server Este error indica que es posible que el servidor no admita la reanudación de descargas; basta con establecer la opción de reanudación en false