file_sftp 0.2.1
file_sftp: ^0.2.1 copied to clipboard
SFTP/SSH filesystem adapter implementing the storage_fs Disk and package:file FileSystem interfaces.
Changelog #
0.2.1 - 2026-06-29 #
Fixed #
SftpFile._toSftpModenow includes read permission forFileMode.write,FileMode.writeOnly, andFileMode.appendmodes. Previously these modes opened SFTP handles without read access, making it impossible to read from aRandomAccessFileopened for writing. This matchesdart:io's semantics where any writable handle also supports reads.- Added unit tests verifying the open-mode flags include
SftpFileOpenMode.readfor all writable modes.
0.2.0 - 2026-06-29 #
Features #
- package:file FileSystem implementation: New
SftpFileSystemimplementing the standardpackage:fileFileSysteminterface - SftpFile: Remote file operations (read, write, copy, rename, delete)
- SftpDirectory: Remote directory operations (create, list, rename, delete, recursive tree removal)
- SftpLink: Remote symbolic link operations (create, update, resolve, rename, delete)
- SftpRandomAccessFile: Offset-based random access read/write over SFTP
- Connection flexibility: Default constructor accepts optional
SftpClient(immediate) orSSHClient(lazy SFTP derivation) fromdartssh2
API #
SftpFileSystem:FileSystemimplementation with three constructors (config, fromClient, fromSftpFs)SftpFileSystemEntity: Abstract base for file/directory/link entitiesSftpFile:Fileimplementation for remote filesSftpDirectory:Directoryimplementation for remote directoriesSftpLink:Linkimplementation for remote symbolic linksSftpRandomAccessFile:RandomAccessFileimplementation with offset-based positioningSftpFileSystem(config, client:): Pass an existingSftpClientto the default constructorSftpFileSystem(config, sshClient:): Pass an existingSSHClientfor lazy SFTP session derivation
Constraints #
- Async-only: All
*Sync()methods throwUnsupportedError - Read-only guard: All write operations check
SftpConfig.readOnly - Error handling: All failures throw
FileSystemException(nothrow_toggle) - File watching not supported
- File locking not supported
- Temporary directories not supported
0.1.0 - 2026-06-25 #
Features #
- SFTP Filesystem Adapter: Full
Filesystemimplementation over SFTP via dartssh2 - Typed Disk Support:
SftpDiskextendsDiskfor integration withStorage.initialize() - Connection Flexibility: Accepts pre-connected
SftpClientor connection params (host, port, username, password) - Built-in Driver Registration:
SftpFilesystemAdapter.register()registers as a storage driver - Abstraction Layer:
SftpFs/SftpFsFileinterfaces for testability - Mock Testing: mocktail-based unit tests via
SftpFsabstraction - Integration Tests: Docker-based SFTP integration tests using testcontainers_compose
API #
SftpConfig: Connection and behavior configurationSftpDisk: Typed disk configuration forStorage.initialize()SftpFilesystemAdapter: Main adapter implementing theFilesysteminterfaceSftpFs/SftpFsFile: Abstract interfaces decoupled from dartssh2SftpFsClient/SftpFsFileHandle: Dartssh2-backed implementations
Operations Supported #
- File:
get,put,delete,exists,missing,copy,move - Streams:
readStream,writeStream - Directories:
makeDirectory,deleteDirectory,files,directories - Metadata:
size,mimeType,checksum,lastModified - Visibility:
getVisibility,setVisibility - Advanced:
prepend,append
Dependencies #
storage_fs: ^0.2.0dartssh2: ^2.18.0path: ^1.9.1convert: ^3.1.2crypto: ^3.0.6mime: ^2.0.0meta: ^1.17.0