| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package vfs
- import (
- "os"
- "path"
- "time"
- )
- // FileContentTyper is an optional interface for vfs.FileInfo
- type FileContentTyper interface {
- GetContentType() string
- }
- // FileInfo implements os.FileInfo for a Cloud Storage file.
- type FileInfo struct {
- name string
- sizeInBytes int64
- modTime time.Time
- mode os.FileMode
- contentType string
- }
- // NewFileInfo creates file info.
- func NewFileInfo(name string, isDirectory bool, sizeInBytes int64, modTime time.Time) FileInfo {
- mode := os.FileMode(0644)
- contentType := ""
- if isDirectory {
- mode = os.FileMode(0755) | os.ModeDir
- contentType = "inode/directory"
- }
- return FileInfo{
- name: path.Base(name), // we have always Unix style paths here
- sizeInBytes: sizeInBytes,
- modTime: modTime,
- mode: mode,
- contentType: contentType,
- }
- }
- // Name provides the base name of the file.
- func (fi FileInfo) Name() string {
- return fi.name
- }
- // Size provides the length in bytes for a file.
- func (fi FileInfo) Size() int64 {
- return fi.sizeInBytes
- }
- // Mode provides the file mode bits
- func (fi FileInfo) Mode() os.FileMode {
- return fi.mode
- }
- // ModTime provides the last modification time.
- func (fi FileInfo) ModTime() time.Time {
- return fi.modTime
- }
- // IsDir provides the abbreviation for Mode().IsDir()
- func (fi FileInfo) IsDir() bool {
- return fi.mode&os.ModeDir != 0
- }
- // Sys provides the underlying data source (can return nil)
- func (fi FileInfo) Sys() interface{} {
- return fi.getFileInfoSys()
- }
- func (fi *FileInfo) setContentType(contenType string) {
- fi.contentType = contenType
- }
- // GetContentType implements FileContentTyper interface
- func (fi FileInfo) GetContentType() string {
- return fi.contentType
- }
|