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ùnghavonzvà mật khẩu11@@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.