main.lua 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. --[[
  2. @module exftp测试程序
  3. @summary exftp库功能测试
  4. @version 1.0
  5. @date 2025.12.28
  6. @usage
  7. 测试exftp库的所有功能,包括:
  8. 1. 创建FTP客户端
  9. 2. 匿名登录
  10. 3. 路径切换
  11. 4. 文件上传
  12. 5. 文件下载
  13. 6. 关闭连接
  14. ]]
  15. _G.sys = require("sys")
  16. require "sysplus"
  17. -- 加载exftp库
  18. local exftp = require "exftp"
  19. -- FTP服务器配置
  20. local FTP_CONFIG = {
  21. host = "192.168.1.119",
  22. port = 21,
  23. username = "anonymous",
  24. password = "",
  25. }
  26. -- 测试文件配置
  27. local TEST_FILES = {
  28. upload = {
  29. local_path = "/samples-master.zip",
  30. remote_path = "/samples-master.zip",
  31. },
  32. download = {
  33. remote_path = "/smalldownload.txt",
  34. local_path = "/smalldownload.txt",
  35. }
  36. }
  37. -- -- 等待网络就绪
  38. -- local function wait_network_ready()
  39. -- log.info("等待网络就绪...")
  40. -- while not socket.adapter(socket.dft()) do
  41. -- log.warn("等待IP_READY", socket.dft())
  42. -- sys.waitUntil("IP_READY", 1000)
  43. -- end
  44. -- log.info("网络已就绪", socket.dft())
  45. -- end
  46. -- 主测试函数
  47. local function exftp_test_task()
  48. log.info("exftp功能测试")
  49. -- 等待网络就绪
  50. sys.waitUntil("IP_READY")
  51. -- 检查上传文件是否存在(文件应该已经存在于目录中)
  52. local file_size = io.fileSize(TEST_FILES.upload.local_path)
  53. if not file_size then
  54. log.error("上传文件不存在", TEST_FILES.upload.local_path)
  55. return
  56. end
  57. -- 1. 创建FTP客户端
  58. log.info("=====================创建FTP客户端==============================")
  59. log.info("1. 创建FTP客户端")
  60. log.info("服务器", FTP_CONFIG.host, "端口", FTP_CONFIG.port)
  61. -- 使用默认适配器
  62. local ftpc = exftp.create(nil, FTP_CONFIG.host, FTP_CONFIG.port)
  63. if not ftpc then
  64. log.error("创建FTP客户端失败")
  65. return
  66. end
  67. log.info("FTP客户端创建成功")
  68. -- -- 可选:开启调试
  69. -- ftpc:debug(true)
  70. -- 2. 登录
  71. log.info("=====================登录=============================")
  72. if not ftpc:auth(FTP_CONFIG.username, FTP_CONFIG.password) then
  73. log.error("登录失败")
  74. ftpc:close()
  75. return
  76. end
  77. log.info("登录成功")
  78. -- 3. 路径切换功能
  79. log.info("=====================路径切换功能=============================")
  80. -- 获取当前目录
  81. local ok, current_dir = ftpc:pwd()
  82. if ok then
  83. log.info("当前目录", current_dir)
  84. else
  85. log.warn("获取当前目录失败", current_dir)
  86. end
  87. -- 切换到/test目录
  88. log.info("切换到 /test 目录")
  89. if ftpc:chdir("/test") then
  90. log.info("切换目录成功")
  91. -- 再次获取当前目录
  92. ok, current_dir = ftpc:pwd()
  93. if ok then
  94. log.info("当前目录", current_dir)
  95. end
  96. -- 返回上一级
  97. if ftpc:cdup() then
  98. log.info("返回上一级目录成功")
  99. end
  100. else
  101. log.warn("切换目录失败")
  102. end
  103. -- 4. 文件上传
  104. log.info("=====================文件上传=============================")
  105. log.info("本地文件", TEST_FILES.upload.local_path)
  106. log.info("远程文件", TEST_FILES.upload.remote_path)
  107. local ok = ftpc:upload(
  108. TEST_FILES.upload.local_path,
  109. TEST_FILES.upload.remote_path,
  110. {
  111. timeout = 30 * 1000, -- 30秒超时
  112. -- buffer_size = n * 1024
  113. }
  114. )
  115. if ok then
  116. log.info("文件上传成功")
  117. else
  118. log.error("文件上传失败")
  119. end
  120. -- 5. 文件下载
  121. log.info("=====================文件下载=============================")
  122. log.info("远程文件", TEST_FILES.download.remote_path)
  123. log.info("本地文件", TEST_FILES.download.local_path)
  124. ok = ftpc:download(
  125. TEST_FILES.download.remote_path,
  126. TEST_FILES.download.local_path,
  127. {
  128. timeout = 30 * 1000 -- 30秒超时
  129. }
  130. )
  131. if ok then
  132. log.info("文件下载成功")
  133. -- 读取下载的文件内容(如果文件较小)
  134. local fd = io.open(TEST_FILES.download.local_path, "r")
  135. if fd then
  136. local file_size = io.fileSize(TEST_FILES.download.local_path)
  137. fd:close()
  138. log.info("下载文件大小", file_size, "字节")
  139. end
  140. else
  141. log.error("文件下载失败")
  142. end
  143. -- 6. 关闭连接
  144. log.info("=====================关闭连接=============================")
  145. ftpc:close()
  146. log.info("FTP连接已关闭")
  147. log.info("测试完成!")
  148. end
  149. -- 启动测试任务
  150. sys.taskInit(exftp_test_task)
  151. -- 运行系统
  152. sys.run()