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,%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.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.