Pular para o conteúdo principal

Upload de arquivos por FTP (ftp.upload)

Declaração

sucesso_do_upload, informacoes_do_upload = ftp.upload(caminho_do_arquivo_local, URL [, tempo_limite_de_conexao_em_segundos, modo_de_retomar_transferencia, funcao_de_callback_por_bloco, tamanho_do_buffer ])

Parâmetros

  • caminho do arquivo local
    Texto: caminho do arquivo local
  • URL
    Texto: endereço remoto para onde o arquivo será enviado; a conta e a senha estão incluídas neste parâmetro
  • 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 upload de cada bloco; o padrão é uma função vazia
    O primeiro parâmetro do callback contém as informações do upload atual; se o callback retornar true, este upload 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 upload
    Booleano: indica se a conexão foi bem-sucedida
  • informações do upload
    Tabela ou texto: se a conexão for bem-sucedida, retorna as informações do upload como tabela; caso contrário, retorna uma descrição textual do motivo da falha de conexão

Descrição

-- estrutura das informações do upload retornadas pelo segundo valor
{
resource_size = total de bytes do arquivo local,
start_pos = posição inicial deste upload no arquivo local,
size_upload = quantidade de bytes deste upload,
speed_upload = velocidade deste upload (em bytes/segundo),
}

Esta função é adequada para enviar 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.upload("/var/mobile/1.zip", "ftp://havonz:11%40%[email protected]/1.zip")
if (done) then
sys.alert("上传完成")
else
sys.alert("连接失败:"..info)
end

Exemplo complexo

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

Observação: o código acima usa as funções sys.alert e sys.toast, que não pertencem a este capítulo.