Chuyển tới nội dung chính

Tải tệp qua FTP (ftp.download)

Khai báo​

tải xuống thành công, thông tin tải xuống = ftp.download(URL, đường dẫn tệp cục bộ [, thời gian chờ kết nối tính bằng giây, chế độ tiếp tục truyền, hàm gọi lại cho từng khối, kích thước bộ đệm ])

Tham số​

  • URL
    Kiểu chuỗi. URL của tệp từ xa, trong tham số này có chứa tên người dùng và mật khẩu.
  • đường dẫn tệp cục bộ
    Kiểu chuỗi. Đường dẫn cục bộ dùng để lưu tệp.
  • thời gian chờ kết nối tính bằng giây
    Kiểu số, không bắt buộc. Thời gian chờ kết nối, tính bằng giây. Mặc định: 10.
  • chế độ tiếp tục truyền
    Kiểu boolean, không bắt buộc. Đặt thành true để cho phép tiếp tục tải từ điểm gián đoạn. Mặc định: false.
  • hàm gọi lại cho từng khối
    Kiểu hàm, không bắt buộc. Hàm gọi lại được gọi sau khi truyền xong mỗi khối dữ liệu. Mặc định: hàm rỗng.
    Đối số đầu tiên là thông tin truyền hiện tại. Nếu hàm gọi lại trả về true, quá trình tải xuống sẽ bị hủy.
  • kích thước bộ đệm
    Kiểu số nguyên, không bắt buộc. Kích thước bộ đệm tính bằng byte. Mặc định: tự động tối ưu.

Giá trị trả về​

  • tải xuống thành công
    Kiểu boolean. Cho biết kết nối và tải xuống có thành công hay không.
  • thông tin tải xuống
    Kiểu bảng hoặc chuỗi. Nếu kết nối thành công, trả về bảng chứa thông tin tải xuống; nếu không, trả về chuỗi mô tả nguyên nhân kết nối thất bại.

Mô tả​

-- Cấu trúc của giá trị trả về thứ hai (info) như sau
{
resource_size = tổng số byte của tài nguyên từ xa,
start_pos = vị trí bắt đầu tải trong tài nguyên ở lần này,
size_download = số byte đã tải ở lần này,
speed_download = tốc độ trung bình tính bằng byte/giây,
}

Hàm này phù hợp để tải tệp lớn; việc dừng tập lệnh trong khi truyền có thể diễn ra chậm.
Hàm này có thể nhường quyền thực thi; các luồng khác có thể được chạy trước khi hàm trả về.

Ví dụ đơn giản​

Đặt thông tin đăng nhập trong URL. Định dạng như sau, phần trong ngoặc vuông là không bắt buộc:

ftp://[user:pass@]host[:port]/path

Nếu tên người dùng hoặc mật khẩu chứa @, : hoặc /, hãy thay tương ứng bằng %40, %3A, %2F. Với các ký tự khác không hợp lệ trong URL, hãy dùng mã hóa phần trăm URL.
Ví dụ với tên người dùng havonz và mật khẩu 11@@22:

local done, info = ftp.download("ftp://havonz:11%40%[email protected]/1.zip", "/var/mobile/1.zip")
if (done) then
sys.alert("Tệp đã được tải xuống.")
else
sys.alert("Kết nối thất bại: "..info)
end

Ví dụ nâng cao​

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("Tiến trình tải xuống "..percent.."%")
end, 4096 * 1024)
--
if (done) then
if (info.start_pos + info.size_download < info.resource_size) then
sys.alert(
"Tải xuống bị gián đoạn\nLần này đã tải "..info.size_download.." byte"
.."\nBắt đầu từ byte thứ "..info.start_pos
.."\nTốc độ trung bình "..math.floor(info.speed_download/1024).." kB/s"
.."\nCòn lại "..(info.resource_size - (info.start_pos + info.size_download)).." byte"
)
else
sys.alert(
"Tải xuống hoàn tất\nLần này đã tải "..info.size_download.." byte"
.."\nBắt đầu từ byte thứ "..info.start_pos
.."\nTốc độ trung bình "..math.floor(info.speed_download/1024).." kB/s"
)
end
else
sys.alert("Kết nối thất bại: "..info)
end

Lưu ý: Ví dụ trên sử dụng các hàm ngoài chương này sys.alert và sys.toast.