github.com/gogf/gf@v1.16.9/os/gres/gres_http_file.go (about) 1 // Copyright GoFrame Author(https://goframe.org). 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 7 package gres 8 9 import ( 10 "bytes" 11 "os" 12 ) 13 14 // Close implements Close interface of http.File. 15 func (f *File) Close() error { 16 return nil 17 } 18 19 // Readdir implements Readdir interface of http.File. 20 func (f *File) Readdir(count int) ([]os.FileInfo, error) { 21 files := f.resource.ScanDir(f.Name(), "*", false) 22 if len(files) > 0 { 23 if count <= 0 || count > len(files) { 24 count = len(files) 25 } 26 infos := make([]os.FileInfo, count) 27 for k, v := range files { 28 infos[k] = v.FileInfo() 29 } 30 return infos, nil 31 } 32 return nil, nil 33 } 34 35 // Stat implements Stat interface of http.File. 36 func (f *File) Stat() (os.FileInfo, error) { 37 return f.FileInfo(), nil 38 } 39 40 // Read implements the io.Reader interface. 41 func (f *File) Read(b []byte) (n int, err error) { 42 reader, err := f.getReader() 43 if err != nil { 44 return 0, err 45 } 46 return reader.Read(b) 47 } 48 49 // Seek implements the io.Seeker interface. 50 func (f *File) Seek(offset int64, whence int) (int64, error) { 51 reader, err := f.getReader() 52 if err != nil { 53 return 0, err 54 } 55 return reader.Seek(offset, whence) 56 } 57 58 func (f *File) getReader() (*bytes.Reader, error) { 59 if f.reader == nil { 60 f.reader = bytes.NewReader(f.Content()) 61 } 62 return f.reader, nil 63 }