anyfs
v0.1.6
Published
Super portable filesystem.
Downloads
10
Readme
anyfs
AnyFS is a portable filesystem abstraction for Node. It aims to provide a consistent API for different file systems.
WARNING: AnyFS is under heavy development, things may change at any time!
Features
- Extensible with plugins
- Super portable with file system adapters
- Works well with Gulp (vinyl-fs plugin)
- API with Promise support
Adapters
AnyFS comes with following adapters.
- Dropbox - NPM: anyfs-dropbox-adapter
- FTP - NPM: anyfs-ftp-adapter
- AWS S3 - NPM: anyfs-s3-adapter
- Memory - Builtin, assess with
AnyFS.MemoryAdapter
- Local: local file system
- SFTP
- Baidu
- GIT
- SVN
Plugins
- Core: builtin, basic filesystem support.
- glob: match files easily.
- vinyl-fs: vinyl-fs port, works well with gulp
Usage
var AnyFs = require('anyfs');
var FtpAdapter = require('anyfs-ftp-adapter');
var DropboxAdapter = require('anyfs-dropbox-adapter');
var VinylFsPlugin = require('anyfs-vinyl-fs-plugin');
AnyFS.addPlugin(new VinylFsPlugin());
var fs1 = new AnyFS(new FtpAdapter({
server: 'ftp.example.com',
username: 'user',
password: 'password',
}));
var fs2 = new AnyFS(new DropboxAdapter({
key: 'appkey',
secret: 'appsecret',
token: 'token',
}));
// Copy files across filesystems(requires the vinyl-fs plugin)
fs1.src('/**/*.jpg')
.pipe(fs2.dest('/backup/abc/'));
// Promise style API
fs1.mkdir('/doc')
.then(function() {
return this.writeFile('/doc/index.md', "content");
})
.then(function() {
return this.metadata('/doc/index.md');
})
.done(function(metadata) {
console.log(metadata.size);
}, function(err) {
console.log('Error occured: ', err);
});
// callback API
fs.mkdir('/doc', function(err) {
if (err) {
console.log(err);
} else {
console.log('mkdir ok');
}
});
API
Core API
Following APIs are basic file system APIs.
constructor(adapter, options)
The constructor accepts an adapter and an options object.
Common options:
- cwd: Current working directory.
metadata(path[, callback(error, metadata)])
Retrieves file and folder metadata.
Folder metadata:
{
"name": "dir1",
"time": [Date Object],
"is_dir": true,
}
File metadata:
{
"name": "file1.txt",
"time": [Date Object],
"is_dir": false,
"size": 123,
...
}
If callback is not provided, a promise is returned.
list(path[, callback(error, list)])
Get contents of directory.
[
{
// metadata
},
...
]
mkdir(path[, callback(error)])
Create directory recursively.
If callback is not provided, a promise is returned.
delete(path[, callback(error)])
Delete file.
If callback is not provided, a promise is returned.
deleteDir(path[, callback(error)])
Delete directory recursively.
If callback is not provided, a promise is returned.
move(oldPath, newPath[, callback(error)])
Move file or directory to a new place.
Parent folder of newPath
is created automaticly.
If callback is not provided, a promise is returned.
writeFile(path, content[, options][, callback(error)])
Write file content, will try to create parent directory.
If callback is not provided, a promise is returned.
readFile(path[, options][, callback(error, data)])
Read file content.
If callback is not provided, a promise is returned.
createWriteStream(path[, options])
Create write stream.
createReadStream(path[, options])
Create read stream.
Extra API
Extra APIs are supported by plugins
Create Custom Adapters
Create Plugins
Acknowledgement
Inspired by Flysystem