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

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.alertsys.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 resume thành false.