Tải tệp qua HTTP (http.download)
Khai báo
tải xuống thành công, thông tin tải xuống = http.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. - đườ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. Bật 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. Được gọi sau mỗi khối dữ liệu; nhận thông tin hiện tại và trả về true để hủy quá trình tải. Mặc định: hàm rỗng. - 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. Trả về bảng thông tin khi thành công; nếu không, trả về chuỗi thông báo lỗi.
Mô tả
-- Cấu trúc của bảng info
{
resource_size = tổng số byte của tài nguyên từ xa,
start_pos = vị trí bắt đầu tải ở lần này,
size_download = số byte đã tải ở lần này,
speed_download = tốc độ trung bình (byte/giâ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
local done, info = http.download("https://192.168.31.13/1.zip", "/var/mobile/1.zip")
if (done) then
sys.alert("Tải xuống hoàn tất")
else
sys.alert("Kết nối thất bại: "..info)
end
Ví dụ nâng cao
local done, info = http.download("https://192.168.31.13/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\nĐã tải "..info.size_download.." byte"
.."\nBắt đầu từ vị trí "..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\nĐã tải "..info.size_download.." byte"
.."\nBắt đầu từ vị trí "..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.
Tham khảo lỗi
- Requested range was not delivered by the server: máy chủ có thể không hỗ trợ tiếp tục tải; hãy đặt
chế độ tiếp tục truyềnthànhfalse.