Отправка файла по FTP (ftp.upload)
Объявление
успешно, информация_об_отправке = ftp.upload(локальный_путь, URL [, тайм-аут_соединения_в_секундах, режим_докачки, функция_обратного_вызова_для_блока, размер_буфера ])
Параметры
- локальный_путь
Текст; локальный путь к файлу. - URL
Текст; удалённый адрес, на который требуется отправить файл, включая имя пользователя и пароль. - тайм-аут_соединения_в_секундах
Вещественное число, необязательный параметр; время ожидания соединения в секундах, по умолчанию 10. - режим_докачки
Логическое значение, необязательный параметр; поддерживать ли докачку: true — да, false — нет, по умолчанию false. - функция_обратного_вызова_для_блока
Функция, необязательный параметр; вызывается после отправки каждого блока, по умолчанию это пустая функция.
Первый параметр функции обратного вызова содержит сведения о текущей отправке; возврат true прерывает эту отправку. - размер_буфера
Целое число, необязательный параметр; размер буфера в байтах, по умолчанию выбирается автоматически.
Возвращаемые значения
- успешно
Логическое значение, указывающее, установлено ли соединение. - информация_об_отправке
Таблица или текст; при успешном соединении возвращаются сведения об отправке в виде таблицы, иначе — текст с причиной сбоя соединения.
Описание
-- Структура второго возвращаемого значения, информация_об_отправке:
{
resource_size = общий размер локального файла,
start_pos = позиция начала этой отправки в локальном файле,
size_upload = объём данных, отправленных в этой операции,
speed_upload = скорость этой отправки (в байтах/с) ,
}
Эта функция подходит для отправки больших файлов; остановка скрипта во время передачи может занять некоторое время.
Эта функция может уступать управление, поэтому до её возврата другие потоки могут получить возможность выполняться.
Простой пример
Имя пользователя и пароль указываются в URL; формат URL показан ниже (параметры в квадратных скобках необязательны).
ftp://[имя:пароль@]адрес[:порт]/путь
Если имя пользователя или пароль содержит символы
@,:или/, их можно экранировать соответственно как%40,%3Aи%2F(другие недопустимые в URL символы можно представить с помощью процентного кодирования URL). Например, имя пользователя —havonz, пароль —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
Сложный пример
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
Примечание: в приведённом коде используются функции из других глав: sys.alert и sys.toast.