http_download_flash.lua 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. --[[
  2. @module http_download_flash
  3. @summary HTTP下载文件到内置Flash模块
  4. @version 1.0.0
  5. @date 2025.09.23
  6. @author 王棚嶙
  7. @usage
  8. 本文件演示的功能为通过HTTP下载文件到内置Flash中:
  9. 1. 网络就绪检测
  10. 2. 创建HTTP下载任务并等待完成
  11. 3. 记录下载结果
  12. 4. 获取并记录文件大小(使用io.fileSize)
  13. 本文件没有对外接口,直接在main.lua中require "http_download_flash"即可
  14. ]]
  15. local function http_download_flash_task()
  16. -- 阶段1: 网络就绪检测
  17. while not socket.adapter(socket.dft()) do
  18. log.warn("HTTP下载", "等待网络连接", socket.dft())
  19. sys.waitUntil("IP_READY", 1000)
  20. end
  21. log.info("HTTP下载", "网络已就绪", socket.dft())
  22. -- 阶段2: 执行下载任务
  23. log.info("HTTP下载", "开始下载任务")
  24. -- 创建下载目录
  25. local download_dir = "/downloads"
  26. if not io.dexist(download_dir) then
  27. io.mkdir(download_dir)
  28. end
  29. -- 核心下载操作开始
  30. local code, headers, body_size = http.request("GET",
  31. "https://gitee.com/openLuat/LuatOS/raw/master/module/Air780EHM_Air780EHV_Air780EGH/demo/audio/sample-6s.mp3",
  32. nil, nil, {dst = download_dir .. "/sample-6s.mp3"}).wait()
  33. -- 阶段3: 记录下载结果
  34. log.info("HTTP下载", "下载完成",
  35. code == 200 and "success" or "error",
  36. code,
  37. json.encode(headers or {}),
  38. body_size)
  39. if code == 200 then
  40. -- 获取实际文件大小 (使用io.fileSize接口)
  41. local actual_size = io.fileSize(download_dir .. "/sample-6s.mp3")
  42. if not actual_size then
  43. -- 备用方案
  44. actual_size = io.fileSize(download_dir .. "/sample-6s.mp3")
  45. end
  46. log.info("HTTP下载", "文件大小验证", "预期:", body_size, "实际:", actual_size)
  47. if actual_size ~= body_size then
  48. log.error("HTTP下载", "文件大小不一致", "预期:", body_size, "实际:", actual_size)
  49. end
  50. -- 展示下载后的文件系统状态
  51. local success, total_blocks, used_blocks, block_size, fs_type = io.fsstat("/")
  52. if success then
  53. log.info("HTTP下载", "下载后文件系统信息:",
  54. "总空间=" .. total_blocks .. "块",
  55. "已用=" .. used_blocks .. "块",
  56. "块大小=" .. block_size.."字节",
  57. "类型=" .. fs_type)
  58. end
  59. end
  60. end
  61. -- 创建下载任务
  62. sys.taskInit(http_download_flash_task)