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

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

Khai báo

done, info = ftp.download(URL, localPath [, connectTimeoutSec, resumeMode, onChunk, bufferSize ])

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.
  • localPath
    Kiểu chuỗi. Đường dẫn cục bộ dùng để lưu tệp.
  • connectTimeoutSec
    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.
  • resumeMode
    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.
  • onChunk
    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.
  • bufferSize
    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ề

  • done
    Kiểu boolean. Cho biết kết nối và tải xuống có thành công hay không.
  • info
    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.alertsys.toast.