httpserver-static.lua 1.0 KB

123456789101112131415161718192021222324252627
  1. -- httpserver-static.lua
  2. -- Part of nodemcu-httpserver, handles sending static files to client.
  3. -- Author: Marcos Kirsch
  4. return function (connection, req, args)
  5. dofile("httpserver-header.lc")(connection, 200, args.ext, args.isGzipped)
  6. -- Send file in little chunks
  7. local bytesRemaining = file.list()[args.file]
  8. -- Chunks larger than 1024 don't work.
  9. -- https://github.com/nodemcu/nodemcu-firmware/issues/1075
  10. local chunkSize = 1024
  11. local fileHandle = file.open(args.file)
  12. while bytesRemaining > 0 do
  13. local bytesToRead = 0
  14. if bytesRemaining > chunkSize then bytesToRead = chunkSize else bytesToRead = bytesRemaining end
  15. local chunk = fileHandle:read(bytesToRead)
  16. connection:send(chunk)
  17. bytesRemaining = bytesRemaining - #chunk
  18. --print(args.file .. ": Sent "..#chunk.. " bytes, " .. bytesRemaining .. " to go.")
  19. chunk = nil
  20. collectgarbage()
  21. end
  22. print("Finished sending: ", args.file)
  23. fileHandle:close()
  24. fileHandle = nil
  25. collectgarbage()
  26. end