fileinfo.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package vfs
  2. import (
  3. "os"
  4. "path"
  5. "time"
  6. )
  7. // FileContentTyper is an optional interface for vfs.FileInfo
  8. type FileContentTyper interface {
  9. GetContentType() string
  10. }
  11. // FileInfo implements os.FileInfo for a Cloud Storage file.
  12. type FileInfo struct {
  13. name string
  14. sizeInBytes int64
  15. modTime time.Time
  16. mode os.FileMode
  17. contentType string
  18. }
  19. // NewFileInfo creates file info.
  20. func NewFileInfo(name string, isDirectory bool, sizeInBytes int64, modTime time.Time) FileInfo {
  21. mode := os.FileMode(0644)
  22. contentType := ""
  23. if isDirectory {
  24. mode = os.FileMode(0755) | os.ModeDir
  25. contentType = "inode/directory"
  26. }
  27. return FileInfo{
  28. name: path.Base(name), // we have always Unix style paths here
  29. sizeInBytes: sizeInBytes,
  30. modTime: modTime,
  31. mode: mode,
  32. contentType: contentType,
  33. }
  34. }
  35. // Name provides the base name of the file.
  36. func (fi FileInfo) Name() string {
  37. return fi.name
  38. }
  39. // Size provides the length in bytes for a file.
  40. func (fi FileInfo) Size() int64 {
  41. return fi.sizeInBytes
  42. }
  43. // Mode provides the file mode bits
  44. func (fi FileInfo) Mode() os.FileMode {
  45. return fi.mode
  46. }
  47. // ModTime provides the last modification time.
  48. func (fi FileInfo) ModTime() time.Time {
  49. return fi.modTime
  50. }
  51. // IsDir provides the abbreviation for Mode().IsDir()
  52. func (fi FileInfo) IsDir() bool {
  53. return fi.mode&os.ModeDir != 0
  54. }
  55. // Sys provides the underlying data source (can return nil)
  56. func (fi FileInfo) Sys() interface{} {
  57. return fi.getFileInfoSys()
  58. }
  59. func (fi *FileInfo) setContentType(contenType string) {
  60. fi.contentType = contenType
  61. }
  62. // GetContentType implements FileContentTyper interface
  63. func (fi FileInfo) GetContentType() string {
  64. return fi.contentType
  65. }