cordova-promise-fs
Wraps the Cordova (and Chrome) File API in convenient functions (that return a Promise)
Are you entangled in a async callback mess to get even the simplest task done? Wait no longer -- here is cordova-promise-fs!
Getting started
bower install cordova-promise-fs
bower install bluebird
npm install cordova-promise-fs
npm install bluebird
cordova platform add ios
cordova plugin add cordova-plugin-file
cordova plugin add cordova-plugin-file-transfer
IMPORTANT: For iOS, use Cordova 3.7.0 or higher (due to a bug that affects requestFileSystem).
Or just download and include CordovaPromiseFS.js.
Usage
Initialize & configuration
var fs = CordovaPromiseFS({
persistent: true,
storageSize: 20*1024*1024,
concurrency: 3
Promise: require('promiscuous')
});
The Promise option expects a Promise library that follows the Promise/A+ spec, such as bluebird (github, download), promiscuous (github,file) or Angular's $q.
Note on concurrency: Concurrent uploads/downloads completely trash your mobile application. That's why I've put a concurrency limit on the number of downloads/uploads. Meteor sets this number on 30. In my experimental testing, I found 3 much more reasonable.
Browsing files
fs.exists(filename)
fs.file(filename)
fs.dir(path)
fs.list(path,optionString)
optionString = 'r'
optionString = 'd'
optionString = 'f'
optionString = 'e'
optionString = 'rfe'
Reading files
fs.read(filename)
fs.readJSON(filename)
fs.toUrl(filename)
fs.toInternalURL(filename)
fs.toDataURL(filename)
Writing files
fs.write(filename,data)
File operations
fs.create(filename)
fs.ensure(path)
fs.move(src,dest)
fs.moveDir(src,dest)
fs.copy(src,dest)
fs.remove(src)
fs.remove(src,true)
fs.removeDir(path)
Upload and download
FileTransfers with automatric retry and concurrency limit!
var promise = fs.upload(source,destination,[options],[onprogress]);
var promise = fs.upload(source,destination,[onprogress]);
var promise = fs.download(source,destination,[options],[onprogress]);
var promise = fs.download(source,destination,[onprogress]);
options.trustAllHosts
options.retry = [1000,2000,3000]
promise.progress(function(progressEvent){...})
promise.abort();
fs.upload(...).then(...)
Utilities
fs.fs
fs.filename(path)
fs.dirname(path)
fs.deviceready
fs.options
fs.isCordova
Normalized path
In CordovaPromiseFS, all filenames and paths are normalized:
- Directories should end with a
/
. - Filenames and directories should never start with a
/
. "./"
is converted to ""
- ".." and "." are resolved.
This allows you to concatenate normalized paths, i.e.
normalize('dir1/dir2') === normalize('dir1') + normalize('dir2') === 'dir1/dir2/';
If you're storing or saving paths, it is recommended to normalize
them first to avoid comparison problems. (i.e. paths are not recognized as the same because of a missing trailing slash).
Beware: the original entry.fullPath
might return a path which starts with a /
. This causes problems on Android, i.e.
var path = filesystem.root.fullPath;
filesystem.root.getDirectory(path);
This problem is solved in CordovaPromiseFS.
Changelog
1.2.5 (05/05/2017)
- Added Crosswalk
- Bugfix: list will return more than 100 entries
1.1.0 (05/05/2016)
- Fixed bug: download/upload support for different Cordova FileSystems.
1.0.0 (07/02/2016)
- Fixed bug in list function, thanks @sebastian-greco
- Improved code readability of transfer, thanks @youjenli
- There is no this, thanks @m0ppers
- Accept string as FileSystem, thanks @dortzur
- Normalize ".." in paths, thanks @starquake
0.13.0 (16/09/2015)
- Merged pull request from @Ijzerenhein. Fixed Chrome Persistent storage quota issue and added directory methods.
0.12.0 (17/03/2015)
- Merged pull request from @jakgra. Now you can write to hidden folders on Android. Thanks!
0.11.0 (17/03/2015)
- Minor improvements in upload
0.10.0 (21/12/2014)
- Support for other fileSystems (undocumented hack)
0.9.0 (28/11/2014)
- Normalize path everywhere.
0.8.0 (27/11/2014)
- Added test-suite, fixed few minor bugs.
0.7.0 (14/11/2014)
- bugfix toInternalURL functions and fix download argument order
0.6.0 (13/11/2014)
0.5.0 (06/11/2014)
- Use
webpack
for the build proces - Fixed many small bugs
0.4.0 (06/11/2014)
- Various small changes
- Added
CordovaPromiseFS.js
for everybody who does not use Browserify/Webpack
0.3.0 (05/11/2014)
- Added
list
options (list r
ecursively, only f
iles, only d
irectories, return result as e
ntries)
0.2.0 (05/11/2014)
- Added
upload
and download
methods with concurrency limit
Contribute
Convert CommonJS to a browser-version:
npm install webpack -g
npm run-script prepublish
Run tests: Navigate to /test/index.html
, for example:
npm install static -g
static .
Feel free to contribute to this project in any way. The easiest way to support this project is by giving it a star.
Contact
© 2014 - Mark Marijnissen