Перейти к основному содержимому

Загрузка файла по FTP (ftp.download)

Объявление

успешно, информация_о_загрузке = ftp.download(URL, локальный_путь [, тайм-аут_соединения_в_секундах, режим_докачки, функция_обратного_вызова_для_блока, размер_буфера ])

Параметры

  • URL
    Текст; адрес удалённого файла, включая имя пользователя и пароль.
  • локальный_путь
    Текст; локальный путь, по которому требуется сохранить файл.
  • тайм-аут_соединения_в_секундах
    Вещественное число, необязательный параметр; время ожидания соединения в секундах, по умолчанию 10.
  • режим_докачки
    Логическое значение, необязательный параметр; поддерживать ли докачку: true — да, false — нет, по умолчанию false.
  • функция_обратного_вызова_для_блока
    Функция, необязательный параметр; вызывается после загрузки каждого блока, по умолчанию это пустая функция.
    Первый параметр функции обратного вызова содержит сведения о текущей загрузке; возврат true прерывает эту загрузку.
  • размер_буфера
    Целое число, необязательный параметр; размер буфера в байтах, по умолчанию выбирается автоматически.

Возвращаемые значения

  • успешно
    Логическое значение, указывающее, установлено ли соединение.
  • информация_о_загрузке
    Таблица или текст; при успешном соединении возвращаются сведения о загрузке в виде таблицы, иначе — текст с причиной сбоя соединения.

Описание

-- Структура второго возвращаемого значения, информация_о_загрузке:
{
resource_size = общий размер удалённого ресурса,
start_pos = позиция начала этой загрузки в ресурсе,
size_download = объём данных, загруженных в этой операции,
speed_download = скорость этой загрузки (в байтах/с) ,
}

Эта функция подходит для загрузки больших файлов; остановка скрипта во время передачи может занять некоторое время.
Эта функция может уступать управление, поэтому до её возврата другие потоки могут получить возможность выполняться.

Простой пример

Имя пользователя и пароль указываются в URL; формат URL показан ниже (параметры в квадратных скобках необязательны).

ftp://[имя:пароль@]адрес[:порт]/путь

Если имя пользователя или пароль содержит символы @, : или /, их можно экранировать соответственно как %40, %3A и %2F (другие недопустимые в URL символы можно представить с помощью процентного кодирования URL). Например, имя пользователя — havonz, пароль — 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

Сложный пример

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

Примечание: в приведённом коде используются функции из других глав: sys.alert и sys.toast.