Download de arquivo HTTP (http.download)
Declaração
sucesso, informações_do_download = http.download(URL, caminho_do_arquivo_local [, segundos_de_timeout_da_conexão, modo_de_retomada, função_de_callback_por_bloco, tamanho_do_buffer ])
Parâmetros
- URL
Texto; endereço do arquivo remoto. - caminho do arquivo local
Texto; caminho local onde o arquivo será salvo. - segundos de timeout da conexão
Número real opcional; tempo limite da conexão, em segundos. O padrão é 10. - modo de retomada
Booleano opcional; indica se a retomada do download deve ser aceita. Use true para aceitar e false para não aceitar; o padrão é false. - função de callback por bloco
Função opcional; é chamada após cada bloco baixado. O padrão é uma função vazia.
O primeiro argumento do callback contém as informações do download atual; se o callback retornar true, o download será interrompido. - tamanho do buffer
Inteiro opcional; tamanho do buffer em bytes. O padrão é a configuração automática ideal.
Valores retornados
- sucesso do download
Booleano; indica se a conexão foi bem-sucedida. - informações do download
Tabela ou texto; retorna uma tabela de informações do download quando a conexão é bem-sucedida, ou uma descrição textual do motivo da falha da conexão.
Descrição
-- a estrutura das informações do download, o segundo valor retornado, é a seguinte
{
resource_size = total_de_bytes_do_recurso_remoto,
start_pos = posição_inicial_deste_download_no_recurso,
size_download = quantidade_de_bytes_deste_download,
speed_download = velocidade_deste_download (em bytes/segundo),
}
Esta função é adequada para downloads de arquivos grandes; interromper o script durante a transferência pode demorar.
Esta função pode ceder a execução; antes de retornar, outras threads podem ter a oportunidade de executar.
Exemplo simples
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
Exemplo complexo
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
Observação: o código acima usa as funções sys.alert e sys.toast, que não pertencem a este capítulo.
Referência de mensagens de erro
Requested range was not delivered by the server indica que o servidor pode não aceitar retomada de download; basta definir a opção de retomada como false.