gres_http_file.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // Copyright 2019 gf Author(https://github.com/gogf/gf). All Rights Reserved.
  2. //
  3. // This Source Code Form is subject to the terms of the MIT License.
  4. // If a copy of the MIT was not distributed with this file,
  5. // You can obtain one at https://github.com/gogf/gf.
  6. package gres
  7. import (
  8. "bytes"
  9. "os"
  10. )
  11. // Close implements Close interface of http.File.
  12. func (f *File) Close() error {
  13. return nil
  14. }
  15. // Readdir implements Readdir interface of http.File.
  16. func (f *File) Readdir(count int) ([]os.FileInfo, error) {
  17. files := f.resource.ScanDir(f.Name(), "*", false)
  18. if len(files) > 0 {
  19. if count <= 0 || count > len(files) {
  20. count = len(files)
  21. }
  22. infos := make([]os.FileInfo, count)
  23. for k, v := range files {
  24. infos[k] = v.FileInfo()
  25. }
  26. return infos, nil
  27. }
  28. return nil, nil
  29. }
  30. // Stat implements Stat interface of http.File.
  31. func (f *File) Stat() (os.FileInfo, error) {
  32. return f.FileInfo(), nil
  33. }
  34. // Read implements the io.Reader interface.
  35. func (f *File) Read(b []byte) (n int, err error) {
  36. reader, err := f.getReader()
  37. if err != nil {
  38. return 0, err
  39. }
  40. return reader.Read(b)
  41. }
  42. // Seek implements the io.Seeker interface.
  43. func (f *File) Seek(offset int64, whence int) (int64, error) {
  44. reader, err := f.getReader()
  45. if err != nil {
  46. return 0, err
  47. }
  48. return reader.Seek(offset, whence)
  49. }
  50. func (f *File) getReader() (*bytes.Reader, error) {
  51. if f.reader == nil {
  52. f.reader = bytes.NewReader(f.Content())
  53. }
  54. return f.reader, nil
  55. }