Ver Fonte

Added more sftp client

tobychui há 2 anos atrás
pai
commit
f45b12a2c1

+ 29 - 0
mod/filesystem/abstractions/sftpfs/sftpFileUtil.go

@@ -0,0 +1,29 @@
+package sftpfs
+
+import "io/fs"
+
+type SftpDirEntry struct {
+	finfo fs.FileInfo
+}
+
+func newDirEntryFromFileInfo(targetFileInfo fs.FileInfo) *SftpDirEntry {
+	return &SftpDirEntry{
+		finfo: targetFileInfo,
+	}
+}
+
+func (de SftpDirEntry) Name() string {
+	return de.finfo.Name()
+}
+
+func (de SftpDirEntry) IsDir() bool {
+	return de.finfo.IsDir()
+}
+
+func (de SftpDirEntry) Type() fs.FileMode {
+	return de.finfo.Mode()
+}
+
+func (de SftpDirEntry) Info() (fs.FileInfo, error) {
+	return de.finfo, nil
+}

+ 31 - 7
mod/filesystem/abstractions/sftpfs/sftpfs.go

@@ -1,4 +1,4 @@
-package stpfs
+package sftpfs
 
 import (
 	"errors"
@@ -238,19 +238,43 @@ func (s SFTPFileSystemAbstraction) ReadFile(filename string) ([]byte, error) {
 	return ioutil.ReadAll(f)
 }
 func (s SFTPFileSystemAbstraction) ReadDir(filename string) ([]fs.DirEntry, error) {
-	s.client.ReadDir(filename)
-	return []fs.DirEntry{}, arozfs.ErrOperationNotSupported
+	result := []fs.DirEntry{}
+	infos, err := s.client.ReadDir(filename)
+	if err != nil {
+		return result, err
+	}
+
+	for _, finfo := range infos {
+		de := newDirEntryFromFileInfo(finfo)
+		result = append(result, de)
+	}
+
+	return result, nil
 }
 func (s SFTPFileSystemAbstraction) WriteStream(filename string, stream io.Reader, mode os.FileMode) error {
-	return arozfs.ErrNullOperation
+	filename = arozfs.GenericPathFilter(filename)
+	f, err := s.client.OpenFile(filename, os.O_CREATE|os.O_WRONLY)
+	if err != nil {
+		return err
+	}
+	_, err = io.Copy(f, stream)
+	return err
 }
 func (s SFTPFileSystemAbstraction) ReadStream(filename string) (io.ReadCloser, error) {
-
-	return nil, arozfs.ErrOperationNotSupported
+	filename = arozfs.GenericPathFilter(filename)
+	f, err := s.client.OpenFile(filename, os.O_RDONLY)
+	if err != nil {
+		return nil, err
+	}
+	return f, nil
 }
 
 func (s SFTPFileSystemAbstraction) Walk(root string, walkFn filepath.WalkFunc) error {
-	return arozfs.ErrOperationNotSupported
+	walker := s.client.Walk(root)
+	for walker.Step() {
+		walkFn(walker.Path(), walker.Stat(), walker.Err())
+	}
+	return nil
 }
 
 func (s SFTPFileSystemAbstraction) Heartbeat() error {