filehandler.lua 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. function send_ok()
  2. mg.write("HTTP/1.0 200 OK\r\n")
  3. mg.write("Connection: close\r\n")
  4. mg.write("Date: " .. os.date("%a, %d %b %Y %H:%M:%S GMT") .. "\r\n")
  5. end
  6. function send_not_found()
  7. mg.write("HTTP/1.0 404 Not Found\r\n")
  8. mg.write("Connection: close\r\n")
  9. mg.write("Date: " .. os.date("%a, %d %b %Y %H:%M:%S GMT") .. "\r\n")
  10. end
  11. handler = "filehandler.lua"
  12. sub_uri = mg.request_info.uri:sub(#handler+2)
  13. filename = "D:\\civetweb\\civetweb" .. sub_uri
  14. attr = lfs.attributes(filename)
  15. --[[
  16. if not attr then
  17. send_not_found()
  18. mg.write("\r\n")
  19. mg.write("File " .. sub_uri .. " not available")
  20. return
  21. end
  22. ]]
  23. if mg.request_info.request_method == "GET" then
  24. -- send_file will handle 404 internally
  25. mg.send_file(filename)
  26. return
  27. elseif mg.request_info.request_method == "HEAD" then
  28. -- send_file can handle "GET" and "HEAD"
  29. mg.send_file(filename)
  30. return
  31. elseif mg.request_info.request_method == "PUT" then
  32. local f = io.open(filename, "w")
  33. if (not f) then
  34. mg.write("HTTP/1.0 500 Internal Server Error\r\n")
  35. mg.write("Connection: close\r\n")
  36. mg.write("Date: " .. os.date("%a, %d %b %Y %H:%M:%S GMT") .. "\r\n")
  37. mg.write("\r\n")
  38. return
  39. end
  40. mg.write("HTTP/1.0 201 Created\r\n")
  41. mg.write("Connection: close\r\n")
  42. mg.write("Date: " .. os.date("%a, %d %b %Y %H:%M:%S GMT") .. "\r\n")
  43. mg.write("\r\n")
  44. repeat
  45. local buf = mg.read();
  46. if (buf) then
  47. f:write(buf)
  48. end
  49. until (not buf);
  50. f:close()
  51. mg.write("HTTP/1.0 201 Created\r\n")
  52. mg.write("Connection: close\r\n")
  53. mg.write("Date: " .. os.date("%a, %d %b %Y %H:%M:%S GMT") .. "\r\n")
  54. mg.write("\r\n")
  55. return
  56. elseif mg.request_info.request_method == "DELETE" then
  57. if not attr then
  58. send_not_found()
  59. mg.write("\r\n")
  60. mg.write("File " .. sub_uri .. " not available")
  61. return
  62. end
  63. os.remove(filename)
  64. mg.write("HTTP/1.0 204 No Content\r\n")
  65. mg.write("Connection: close\r\n")
  66. mg.write("Date: " .. os.date("%a, %d %b %Y %H:%M:%S GMT") .. "\r\n")
  67. mg.write("\r\n")
  68. return
  69. elseif mg.request_info.request_method == "OPTIONS" then
  70. send_ok()
  71. mg.write("Allow: GET, HEAD, PUT, DELETE, OPTIONS\r\n")
  72. mg.write("\r\n")
  73. return
  74. else
  75. mg.write("HTTP/1.0 405 Method Not Allowed\r\n")
  76. mg.write("Connection: close\r\n")
  77. mg.write("Date: " .. os.date("%a, %d %b %Y %H:%M:%S GMT") .. "\r\n")
  78. mg.write("\r\n")
  79. return
  80. end