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  }