ftpFileWrapper.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package ftpfs
  2. import (
  3. "io/fs"
  4. "time"
  5. "github.com/jlaffaye/ftp"
  6. )
  7. type File struct {
  8. entry ftp.Entry
  9. }
  10. type DirEntry struct {
  11. finfo *ftp.Entry
  12. conn *ftp.ServerConn
  13. path string
  14. }
  15. func newDirEntryFromFTPEntry(targetEntry *ftp.Entry, conn *ftp.ServerConn, originalPath string) *DirEntry {
  16. return &DirEntry{
  17. finfo: targetEntry,
  18. conn: conn,
  19. }
  20. }
  21. func (de DirEntry) Name() string {
  22. return de.finfo.Name
  23. }
  24. func (de DirEntry) IsDir() bool {
  25. return de.finfo.Type == ftp.EntryTypeFolder
  26. }
  27. func (de DirEntry) Type() fs.FileMode {
  28. return 0777
  29. }
  30. func (de DirEntry) Info() (fs.FileInfo, error) {
  31. e := NewFileInfoFromEntry(de.finfo, de.conn, de.path)
  32. return e, nil
  33. }
  34. type FileInfo struct {
  35. entry *ftp.Entry
  36. conn *ftp.ServerConn
  37. path string
  38. }
  39. func NewFileInfoFromEntry(e *ftp.Entry, c *ftp.ServerConn, originalPath string) FileInfo {
  40. return FileInfo{
  41. entry: e,
  42. conn: c,
  43. path: originalPath,
  44. }
  45. }
  46. func (fi FileInfo) Name() string {
  47. return fi.entry.Name
  48. }
  49. func (fi FileInfo) Size() int64 {
  50. return int64(fi.entry.Size)
  51. }
  52. func (fi FileInfo) Mode() fs.FileMode {
  53. return 664
  54. }
  55. func (fi FileInfo) ModTime() time.Time {
  56. return fi.entry.Time
  57. }
  58. func (fi FileInfo) IsDir() bool {
  59. return fi.entry.Type == ftp.EntryTypeFolder
  60. }
  61. func (fi FileInfo) Sys() interface{} {
  62. return nil
  63. }