test_fileupload.lua 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. function demo_http_post_file()
  2. -- -- POST multipart/form-data模式 上传文件---手动拼接
  3. local boundary = "----WebKitFormBoundary"..os.time()
  4. local req_headers = {
  5. ["Content-Type"] = "multipart/form-data; boundary="..boundary,
  6. }
  7. local body = "--"..boundary.."\r\n"..
  8. "Content-Disposition: form-data; name=\"uploadFile\"; filename=\"luatos_uploadFile_TEST01.txt\""..
  9. "\r\nContent-Type: text/plain\r\n\r\n"..
  10. "1111http_测试一二三四654zacc\r\n"..
  11. "--"..boundary
  12. log.info("headers: ", "\r\n"..json.encode(req_headers))
  13. log.info("body: ", "\r\n"..body)
  14. local code, headers, body = http.request("POST","http://airtest.openluat.com:2900/uploadFileToStatic",
  15. req_headers,
  16. body -- POST请求所需要的body, string, zbuff, file均可
  17. ).wait()
  18. log.info("http.post", code, headers, body)
  19. -- 也可用postMultipartFormData(url, params) 上传文件
  20. postMultipartFormData(
  21. "http://airtest.openluat.com:2900/uploadFileToStatic",
  22. {
  23. -- texts =
  24. -- {
  25. -- ["imei"] = "862991234567890",
  26. -- ["time"] = "20180802180345"
  27. -- },
  28. files =
  29. {
  30. ["uploadFile"] = "/luadb/luatos_uploadFile.txt",
  31. }
  32. }
  33. )
  34. end
  35. ---- MultipartForm上传文件
  36. -- url string 请求URL地址
  37. -- req_headers table 请求头
  38. -- params table 需要传输的数据参数
  39. function postMultipartFormData(url, params)
  40. local boundary = "----WebKitFormBoundary"..os.time()
  41. local req_headers = {
  42. ["Content-Type"] = "multipart/form-data; boundary="..boundary,
  43. }
  44. local body = {}
  45. -- 解析拼接 body
  46. for k,v in pairs(params) do
  47. if k=="texts" then
  48. local bodyText = ""
  49. for kk,vv in pairs(v) do
  50. print(kk,vv)
  51. bodyText = bodyText.."--"..boundary.."\r\nContent-Disposition: form-data; name=\""..kk.."\"\r\n\r\n"..vv.."\r\n"
  52. end
  53. table.insert(body, bodyText)
  54. elseif k=="files" then
  55. local contentType =
  56. {
  57. txt = "text/plain", -- 文本
  58. jpg = "image/jpeg", -- JPG 格式图片
  59. jpeg = "image/jpeg", -- JPEG 格式图片
  60. png = "image/png", -- PNG 格式图片
  61. gif = "image/gif", -- GIF 格式图片
  62. html = "image/html", -- HTML
  63. json = "application/json" -- JSON
  64. }
  65. for kk,vv in pairs(v) do
  66. if type(vv) == "table" then
  67. for i=1, #vv do
  68. print(kk,vv[i])
  69. table.insert(body, "--"..boundary.."\r\nContent-Disposition: form-data; name=\""..kk.."\"; filename=\""..vv[i]:match("[^%/]+%w$").."\"\r\nContent-Type: "..contentType[vv[i]:match("%.(%w+)$")].."\r\n\r\n")
  70. table.insert(body, io.readFile(vv[i]))
  71. table.insert(body, "\r\n")
  72. end
  73. else
  74. print(kk,vv)
  75. table.insert(body, "--"..boundary.."\r\nContent-Disposition: form-data; name=\""..kk.."\"; filename=\""..vv:match("[^%/]+%w$").."\"\r\nContent-Type: "..contentType[vv:match("%.(%w+)$")].."\r\n\r\n")
  76. table.insert(body, io.readFile(vv))
  77. table.insert(body, "\r\n")
  78. end
  79. end
  80. end
  81. end
  82. table.insert(body, "--"..boundary.."--\r\n")
  83. body = table.concat(body)
  84. log.info("headers: ", "\r\n" .. json.encode(req_headers), type(body))
  85. log.info("body: " .. body:len() .. "\r\n" .. body)
  86. local code, headers, body = http.request("POST",url,
  87. req_headers,
  88. body
  89. ).wait()
  90. log.info("http.post", code, headers, body)
  91. end