HTTP 파일 다운로드 (http.download)
선언
다운로드 성공 여부, 다운로드 정보 = http.download(URL, 로컬 파일 경로 [, 연결 제한 시간(초), 이어받기 모드, 청크 콜백 함수, 버퍼 크기 ])
매개변수
- URL
문자열. 원격 파일 주소입니다. - 로컬 파일 경로
문자열. 저장할 로컬 경로입니다. - 연결 제한 시간(초)
실수, 선택 사항. 연결 제한 시간이며 단위는 초, 기본값은 10입니다. - 이어받기 모드
불리언, 선택 사항. 이어받기 지원 여부이며 true는 사용, false는 사용 안 함을 뜻합니다. 기본값은 false입니다. - 청크 콜백 함수
함수, 선택 사항. 청크 콜백 함수이며 청크 하나를 다운로드할 때마다 한 번 호출됩니다. 기본값은 빈 함수입니다.
첫 번째 인수는 현재 다운로드 정보이며, 콜백 함수가 true를 반환하면 이번 다운로드를 중단합니다. - 버퍼 크기
정수, 선택 사항. 버퍼 크기의 바이트 수이며 기본값은 자동 최적 설정입니다.
반환값
- 다운로드 성공 여부
불리언. 연결 성공 여부입니다. - 다운로드 정보
테이블 또는 문자열. 연결에 성공하면 테이블 형식의 다운로드 정보를 반환하고, 실패하면 연결 실패 원인을 설명하는 문자열을 반환합니다.
설명
-- 두 번째 반환값인 다운로드 정보의 구조는 다음과 같습니다
{
resource_size = 원격 리소스의 전체 바이트 수,
start_pos = 이번 다운로드의 리소스 시작 위치,
size_download = 이번 다운로드의 바이트 수,
speed_download = 이번 다운로드 속도 (단위: 바이트/초),
}
이 함수는 큰 파일을 다운로드하는 데 적합합니다. 전송 중 스크립트를 중지하면 종료가 느릴 수 있습니다.
이 함수는 실행을 양보할 수 있으며, 반환되기 전에 다른 스레드가 실행 기회를 얻을 수 있습니다.
간단한 예제
local done, info = http.download("https://192.168.31.13/1.zip", "/var/mobile/1.zip")
if (done) then
sys.alert("下载完成")
else
sys.alert("连接失败:"..info)
end
복잡한 예제
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("下载进度 "..percent.."%")
end, 4096 * 1024)
--
if (done) then
if (info.start_pos + info.size_download < info.resource_size) then
sys.alert(
"下载中断\n本次下载 "..info.size_download.." 字节"
.."\n从第 "..info.start_pos.." 字节开始下载"
.."\n平均速度为 "..math.floor(info.speed_download/1024).." kB/s"
.."\n还有剩 "..(info.resource_size - (info.start_pos + info.size_download)).." 字节"
)
else
sys.alert(
"下载完成\n本次下载 "..info.size_download.." 字节"
.."\n从第 "..info.start_pos.." 字节开始下载"
.."\n平均速度为 "..math.floor(info.speed_download/1024).." kB/s"
)
end
else
sys.alert("连接失败:"..info)
end
참고: 위 코드에서는 이 장에서 설명하지 않는 함수인 sys.alert와 sys.toast를 사용합니다.
오류 정보 참고
Requested range was not delivered by the server 오류는 서버가 이어받기를 지원하지 않을 수 있음을 뜻합니다. 이어받기 옵션을 false로 설정하면 됩니다.