file.lua 644 B

12345678910111213141516171819202122232425262728293031323334
  1. local buffer = require "resty.t1k.buffer"
  2. local _M = {
  3. _VERSION = '1.0.0'
  4. }
  5. local buffer_size = 2 ^ 13
  6. function _M.read(p, size)
  7. size = (not size or size < 0) and 0 or size
  8. local f, err = io.open(p, "rb")
  9. if not f or err then
  10. return nil, err, nil
  11. end
  12. local left = size
  13. local buf = buffer:new()
  14. while left ~= 0 do
  15. local block_size = math.min(left, buffer_size)
  16. local block = f:read(block_size)
  17. if not block then
  18. break
  19. end
  20. buf:add(block)
  21. left = math.max(left - block_size, 0)
  22. end
  23. f:close()
  24. return true, nil, buf
  25. end
  26. return _M