Tải tệp lên qua FTP (ftp.upload)
Khai báo
done, info = ftp.upload(localPath, URL [, connectTimeoutSec, resumeMode, onChunk, bufferSize ])
Tham số
- localPath
Kiểu chuỗi. Đường dẫn của tệp cục bộ cần tải lên. - URL
Kiểu chuỗi. URL đích từ xa, trong tham số này có chứa tên người dùng và mật khẩu. - 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 lên 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 lên 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 lên; 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ệp cục bộ,
start_pos = vị trí bắt đầu tải lên trong tệp cục bộ ở lần này,
size_upload = số byte đã tải lên ở lần này,
speed_upload = 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 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.upload("/var/mobile/1.zip", "ftp://havonz:11%40%[email protected]/1.zip")
if (done) then
sys.alert("Tệp đã được tải lên.")
else
sys.alert("Kết nối thất bại: "..info)
end
Ví dụ nâng cao
local done, info = ftp.upload("/var/mobile/1.zip", "ftp://havonz:[email protected]/1.zip", 10, true, function(binfo)
local percent = math.floor(((binfo.start_pos + binfo.size_upload) / binfo.resource_size) * 100)
sys.toast("Tiến trình tải lên "..percent.."%")
end, 4096 * 1024)
--
if (done) then
if (info.start_pos + info.size_upload < info.resource_size) then
sys.alert(
"Tải lên bị gián đoạn\nLần này đã tải "..info.size_upload.." byte"
.."\nBắt đầu từ byte thứ "..info.start_pos
.."\nTốc độ trung bình "..math.floor(info.speed_upload/1024).." kB/s"
.."\nCòn lại "..(info.resource_size - (info.start_pos + info.size_upload)).." byte"
)
else
sys.alert(
"Tải lên hoàn tất\nLần này đã tải "..info.size_upload.." byte"
.."\nBắt đầu từ byte thứ "..info.start_pos
.."\nTốc độ trung bình "..math.floor(info.speed_upload/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.