Pular para o conteúdo principal

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, %3A e %2F (outros caracteres inválidos em uma URL podem usar a codificação percentual de URL). Por exemplo, para a conta havonz e a senha 11@@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.