Tải tệp qua HTTP (http.download)
Khai báo
done, info = http.download(URL, local_path [, connect_timeout_secs, resume, on_chunk, buffer_size ])
Tham số
- URL
Kiểu chuỗi. URL của tệp từ xa. - local_path
Kiểu chuỗi. Đường dẫn cục bộ dùng để lưu tệp. - connect_timeout_secs
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. - resume
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. - on_chunk
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. - buffer_size
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. 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
resumethànhfalse.