Mateusz Wójt
Mateusz Wójt

Reputation: 139

ngCordova write file on Android

I'm trying to write file to local storage on Android device, using ngCordova function found on ionic forum. This is how the function looks:

$scope.exportClicked = function(options) {
  var deferred = $q.defer();
  $window.resolveLocalFileSystemURL($window.cordova.file.dataDirectory,
    function(dir) {
      dir.getFile('text.txt', {
        create: true
      }, function(fileEntry) {
        fileEntry.createWriter(
          function(fileWriter) {
            if (options['append'] === true) {
              fileWriter.seek(fileWriter.length);
            }
            fileWriter.onwriteend = function(evt) {
              evt.fileEntry = fileEntry;
              deferred.resolve(evt);
            };
            fileWriter.write(data);
          },
          function(error) {
            deferred.reject(error);
          }
        );
      }, function(er) {
        deferred.reject(error);
      });
    });
  return deferred.promise;
};

When I'm running app through ionic in webbrowser, it gives me an error:

TypeError: Cannot read property 'file' of undefined
at Scope.$scope.exportClicked (app.js:27)

I've installed cordova file plugin, but it looks like it can't find cordova.file functionality. On Android device it won't work either. Any ideas?

Upvotes: 0

Views: 2030

Answers (2)

Nurdin
Nurdin

Reputation: 23883

You forgot to install file cordova plugin. https://github.com/apache/cordova-plugin-file

Upvotes: 1

laughingpine
laughingpine

Reputation: 1049

$window.cordova isn't defined. Since you are using ngCordova, and ngCordova has official support for the file plugin, I would start with the ngCordova documentation for the file plugin. Here is the bit you might be interested in:

$cordovaFile.writeFile(cordova.file.dataDirectory, "file.txt", "text", true)
  .then(function (success) {
    // success
  }, function (error) {
    // error
  });

You also get the added bonus have having more readable code when you use the ngCordova implementation.

If you would rather follow your original example more closely, try replacing $window.cordova with window.cordova, or simply cordova.

Upvotes: 0

Related Questions