Skip to content

Instantly share code, notes, and snippets.

@rally25rs
Created December 29, 2014 14:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save rally25rs/e93e441c439eeeb82ba8 to your computer and use it in GitHub Desktop.
Save rally25rs/e93e441c439eeeb82ba8 to your computer and use it in GitHub Desktop.
Cordova File API Wrapper
window.fileStorage =
save: (name, data) ->
deferred = $.Deferred()
fail = (error) =>
deferred.reject(error)
gotFileSystem = (fileSystem) =>
fileSystem.root.getFile(name, { create: true, exclusive: false }, gotFileEntry, fail)
gotFileEntry = (fileEntry) =>
fileEntry.createWriter(gotFileWriter, fail)
gotFileWriter = (writer) =>
writer.onwrite = () =>
deferred.resolve()
writer.onerror = fail
writer.write(data)
window.requestFileSystem(window.LocalFileSystem.PERSISTENT, data.length || 0, gotFileSystem, fail)
return deferred.promise()
load: (name) ->
deferred = $.Deferred()
fail = (error) =>
deferred.reject(error)
gotFileSystem = (fileSystem) =>
fileSystem.root.getFile(name, { create: false, exclusive: false }, gotFileEntry, fail)
gotFileEntry = (fileEntry) =>
fileEntry.file(gotFile, fail)
gotFile = (file) =>
reader = new FileReader()
reader.onloadend = (evt) =>
data = evt.target.result
deferred.resolve(data)
reader.readAsText(file)
window.requestFileSystem(window.LocalFileSystem.PERSISTENT, 0, gotFileSystem, fail)
return deferred.promise()
delete: (name) =>
deferred = $.Deferred()
fail = (error) =>
deferred.reject(error)
gotFileSystem = (fileSystem) =>
fileSystem.root.getFile(name, { create: false, exclusive: false }, gotFileEntry, fail)
gotFileEntry = (fileEntry) =>
fileEntry.remove()
window.requestFileSystem(window.LocalFileSystem.PERSISTENT, 0, gotFileSystem, fail)
return deferred.promise()
@rally25rs
Copy link
Author

This code is discussed in a blog post: Using Deferreds with the Cordova File API

@Montoya
Copy link

Montoya commented Nov 23, 2015

This saved my butt. I was banging my head against the wall for the past two weeks trying to get file writing / reading working in Cordova to no avail. This code sample did it for me. Also see my fork with a few simplifications & support for traversing directories!

@john-doherty
Copy link

Thank you both for the code!

I've updated it to use standard Promises now that they're well supported.

I also added JSDoc comments and returned the filename from the fileStorage.write method.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment