local ftp = require("socket.ftp") local ltn12 = require("ltn12") local url = require("socket.url") local DocumentRegistry = require("document/documentregistry") local FtpApi = { } function FtpApi:nlst(u) local t = {} local p = url.parse(u) p.command = "nlst" p.sink = ltn12.sink.table(t) local r, e = ftp.get(p) return r and table.concat(t), e end function FtpApi:listFolder(address_path) local ftp_list = {} local ftp_file = {} local type local extension local file_name local ls_ftp = self:nlst(address_path) if ls_ftp == nil then return false end for item in (ls_ftp..'\n'):gmatch'(.-)\r?\n' do if item ~= '' then file_name = item:match("([^/]+)$") extension = item:match("^.+(%..+)$") item = "/" .. item if not extension then type = "folder" table.insert(ftp_list, { text = file_name .. "/", url = item, type = type, }) --show only file with supported formats elseif extension and DocumentRegistry:getProvider(item) then type = "file" table.insert(ftp_file, { text = file_name, url = item, type = type, }) end end end --sort table.sort(ftp_list, function(v1,v2) return v1.text < v2.text end) table.sort(ftp_file, function(v1,v2) return v1.text < v2.text end) for _, files in ipairs(ftp_file) do table.insert(ftp_list, { text = files.text, url = files.url, type = files.type }) end return ftp_list end function FtpApi:downloadFile(file_path) return ftp.get(file_path ..";type=i") end return FtpApi