Download de arquivos por FTP (ftp.download)
Declaração
sucesso_do_download, informacoes_do_download = ftp.download(URL, caminho_do_arquivo_local [, tempo_limite_de_conexao_em_segundos, modo_de_retomar_transferencia, funcao_de_callback_por_bloco, tamanho_do_buffer ])
Parâmetros
- URL
Texto: endereço do arquivo remoto; a conta e a senha estão incluídas neste parâmetro - caminho do arquivo local
Texto: caminho local onde o arquivo será salvo - tempo limite de conexão em segundos
Número real, opcional: tempo limite da conexão, em segundos; o padrão é 10 - modo de retomar transferência
Booleano, opcional: se deve aceitar a retomada de transferências; true sim, false não; o padrão é false - função de callback por bloco
Função, opcional: callback chamado depois do download de cada bloco; o padrão é uma função vazia
O primeiro parâmetro do callback contém as informações do download atual; se o callback retornar true, este download será interrompido - tamanho do buffer
Inteiro, opcional: tamanho do buffer em bytes; o padrão é a configuração automática ideal
Valores de retorno
- sucesso do download
Booleano: indica se a conexão foi bem-sucedida - informações do download
Tabela ou texto: se a conexão for bem-sucedida, retorna as informações do download como tabela; caso contrário, retorna uma descrição textual do motivo da falha de conexão
Descrição
-- estrutura das informações do download retornadas pelo segundo valor
{
resource_size = total de bytes do recurso remoto,
start_pos = posição inicial desta transferência no recurso,
size_download = quantidade de bytes desta transferência,
speed_download = velocidade desta transferência (em bytes/segundo),
}
Esta função é adequada para baixar arquivos grandes; interromper o script durante a transferência pode demorar.
Esta função pode ceder a execução, permitindo que outras threads sejam executadas antes de seu retorno.
Exemplo simples
A conta e a senha são escritas na URL; o formato exato da URL é o seguinte (os parâmetros entre colchetes são opcionais):
ftp://[conta:senha@]endereco[:porta]/caminho
Se a conta ou a senha contiver os caracteres
@,:ou/, eles poderão ser escapados respectivamente como%40,%3Ae%2F(outros caracteres inválidos em uma URL podem usar a codificação percentual de URL). Por exemplo, para a contahavonze a senha11@@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
Exemplo complexo
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
Observação: o código acima usa as funções sys.alert e sys.toast, que não pertencem a este capítulo.