file_limiter.go 352 B

123456789101112131415161718192021222324252627
  1. package fs
  2. import (
  3. "io"
  4. "net/http"
  5. )
  6. type fileLimiter struct {
  7. f http.File
  8. left int
  9. }
  10. func (lr *fileLimiter) Read(p []byte) (n int, err error) {
  11. if lr.left <= 0 {
  12. return 0, io.EOF
  13. }
  14. if len(p) > lr.left {
  15. p = p[0:lr.left]
  16. }
  17. n, err = lr.f.Read(p)
  18. lr.left -= n
  19. return
  20. }
  21. func (lr *fileLimiter) Close() error {
  22. return lr.f.Close()
  23. }