You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cordova.apache.org by "Vito Macchia (JIRA)" <ji...@apache.org> on 2016/03/06 13:38:40 UTC
[jira] [Updated] (CB-10798) Cannot create folder into
cordova.file.externalRootDirectory on Android 6.x Marshmallow
[ https://issues.apache.org/jira/browse/CB-10798?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Vito Macchia updated CB-10798:
------------------------------
Description:
Cannot create folder into cordova.file.externalRootDirectory on Android 6.x Marshmallow. It always returns encording error (12), while on Android 5.x (Lollipop) the same code works fine.
On Marshmallow devices I can succesfully create folders only into cordova.file.externalDataDirectory.
No matter the value of preference AndroidPersistentFileLocation or AndroidExtraFilesystems.
Code (ES6, sorry)
{code:title=createFolder.js|borderStyle=solid}
function errorCode(e) {
var msg = '';
switch (e.code) {
case FileError.ABORT_ERR:
msg = 'ABORT_ERR';
break;
case FileError.ENCODING_ERR:
msg = 'ENCODING_ERR';
break;
case FileError.NOT_READABLE_ERR:
msg = 'NOT_READABLE_ERR';
break;
case FileError.PATH_EXISTS_ERR:
msg = 'PATH_EXISTS_ERR';
break;
case FileError.QUOTA_EXCEEDED_ERR:
msg = 'QUOTA_EXCEEDED_ERR';
break;
case FileError.NOT_FOUND_ERR:
msg = 'NOT_FOUND_ERR';
break;
case FileError.SECURITY_ERR:
msg = 'SECURITY_ERR';
break;
case FileError.INVALID_MODIFICATION_ERR:
msg = 'INVALID_MODIFICATION_ERR';
break;
case FileError.INVALID_STATE_ERR:
msg = 'INVALID_STATE_ERR';
break;
default:
msg = 'Unknown Error';
break;
};
console.log('Error: ' + msg, "CODE", e);
return msg;
}
const STATIC_CONTENT_DIR = 'MY_Folder';
function createDirectory(startDirectory = cordova.file.externalRootDirectory) {
return new WinJS.Promise(function(success, fail) {
window.resolveLocalFileSystemURL(startDirectory, function(directory) {
console.log("FS ROOT", directory);
function fileGetDir(path, cb) {
console.log("*** PATH", path);
var fnGetOrCreateDir = function(p, de) {
var entry = p.shift();
console.log("PATH", path);
if (entry) {
de.getDirectory(entry, {
create: true,
exclusive: false
}, function(dirEntry) {
console.log("CR", dirEntry);
fnGetOrCreateDir(p, dirEntry);
}, fileFSError);
} else
if (cb) cb(de);
};
if (path) {
var arPath = path.split("/");
fnGetOrCreateDir(arPath, directory.filesystem.root);
} else {
if (cb) cb(directory);
}
}
fileGetDir(STATIC_CONTENT_DIR, onSuccess);
}, fileFSError);
function fileFSError(e) {
console.log(e.code);
try {
console.log("fileFSError: " + JSON.stringify(e) + errorCode(e));
fail(e);
} catch (err) {
fail(err);
}
}
function onSuccess(dirEntry) {
console.log(dirEntry.fullPath);
success(dirEntry.fullPath)
}
});
}
{code}
was:
Cannot create folder into cordova.file.externalRootDirectory on Android 6.x Marshmallow. It always returns encording error (12), while on Android 5.x (Lollipop) the same code works fine.
On Marshmallow devices I can succesfully create folders only into cordova.file.externalDataDirectory.
No matter the value of preference AndroidPersistentFileLocation or AndroidExtraFilesystems.
Code (ES6, sorry)
{code:title=createFile.js|borderStyle=solid}
function errorCode(e) {
var msg = '';
switch (e.code) {
case FileError.ABORT_ERR:
msg = 'ABORT_ERR';
break;
case FileError.ENCODING_ERR:
msg = 'ENCODING_ERR';
break;
case FileError.NOT_READABLE_ERR:
msg = 'NOT_READABLE_ERR';
break;
case FileError.PATH_EXISTS_ERR:
msg = 'PATH_EXISTS_ERR';
break;
case FileError.QUOTA_EXCEEDED_ERR:
msg = 'QUOTA_EXCEEDED_ERR';
break;
case FileError.NOT_FOUND_ERR:
msg = 'NOT_FOUND_ERR';
break;
case FileError.SECURITY_ERR:
msg = 'SECURITY_ERR';
break;
case FileError.INVALID_MODIFICATION_ERR:
msg = 'INVALID_MODIFICATION_ERR';
break;
case FileError.INVALID_STATE_ERR:
msg = 'INVALID_STATE_ERR';
break;
default:
msg = 'Unknown Error';
break;
};
console.log('Error: ' + msg, "CODE", e);
return msg;
}
const STATIC_CONTENT_DIR = 'MY_Folder';
function createDirectory(startDirectory = cordova.file.externalRootDirectory) {
return new WinJS.Promise(function(success, fail) {
window.resolveLocalFileSystemURL(startDirectory, function(directory) {
console.log("FS ROOT", directory);
function fileGetDir(path, cb) {
console.log("*** PATH", path);
var fnGetOrCreateDir = function(p, de) {
var entry = p.shift();
console.log("PATH", path);
if (entry) {
de.getDirectory(entry, {
create: true,
exclusive: false
}, function(dirEntry) {
console.log("CR", dirEntry);
fnGetOrCreateDir(p, dirEntry);
}, fileFSError);
} else
if (cb) cb(de);
};
if (path) {
var arPath = path.split("/");
fnGetOrCreateDir(arPath, directory.filesystem.root);
} else {
if (cb) cb(directory);
}
}
fileGetDir(STATIC_CONTENT_DIR, onSuccess);
}, fileFSError);
function fileFSError(e) {
console.log(e.code);
try {
console.log("fileFSError: " + JSON.stringify(e) + errorCode(e));
fail(e);
} catch (err) {
fail(err);
}
}
function onSuccess(dirEntry) {
console.log(dirEntry.fullPath);
success(dirEntry.fullPath)
}
});
}
{code}
> Cannot create folder into cordova.file.externalRootDirectory on Android 6.x Marshmallow
> ---------------------------------------------------------------------------------------
>
> Key: CB-10798
> URL: https://issues.apache.org/jira/browse/CB-10798
> Project: Apache Cordova
> Issue Type: Bug
> Components: Plugin File
> Affects Versions: 4.1.1
> Environment: Android 6.0.1 (Nexus 9 and other 6.x devices), Cordova cli 6.0.0, Android platform 5.1.0
> Reporter: Vito Macchia
>
> Cannot create folder into cordova.file.externalRootDirectory on Android 6.x Marshmallow. It always returns encording error (12), while on Android 5.x (Lollipop) the same code works fine.
> On Marshmallow devices I can succesfully create folders only into cordova.file.externalDataDirectory.
> No matter the value of preference AndroidPersistentFileLocation or AndroidExtraFilesystems.
> Code (ES6, sorry)
> {code:title=createFolder.js|borderStyle=solid}
> function errorCode(e) {
> var msg = '';
> switch (e.code) {
> case FileError.ABORT_ERR:
> msg = 'ABORT_ERR';
> break;
> case FileError.ENCODING_ERR:
> msg = 'ENCODING_ERR';
> break;
> case FileError.NOT_READABLE_ERR:
> msg = 'NOT_READABLE_ERR';
> break;
> case FileError.PATH_EXISTS_ERR:
> msg = 'PATH_EXISTS_ERR';
> break;
> case FileError.QUOTA_EXCEEDED_ERR:
> msg = 'QUOTA_EXCEEDED_ERR';
> break;
> case FileError.NOT_FOUND_ERR:
> msg = 'NOT_FOUND_ERR';
> break;
> case FileError.SECURITY_ERR:
> msg = 'SECURITY_ERR';
> break;
> case FileError.INVALID_MODIFICATION_ERR:
> msg = 'INVALID_MODIFICATION_ERR';
> break;
> case FileError.INVALID_STATE_ERR:
> msg = 'INVALID_STATE_ERR';
> break;
> default:
> msg = 'Unknown Error';
> break;
> };
> console.log('Error: ' + msg, "CODE", e);
> return msg;
> }
> const STATIC_CONTENT_DIR = 'MY_Folder';
> function createDirectory(startDirectory = cordova.file.externalRootDirectory) {
> return new WinJS.Promise(function(success, fail) {
> window.resolveLocalFileSystemURL(startDirectory, function(directory) {
> console.log("FS ROOT", directory);
> function fileGetDir(path, cb) {
> console.log("*** PATH", path);
> var fnGetOrCreateDir = function(p, de) {
> var entry = p.shift();
> console.log("PATH", path);
> if (entry) {
> de.getDirectory(entry, {
> create: true,
> exclusive: false
> }, function(dirEntry) {
> console.log("CR", dirEntry);
> fnGetOrCreateDir(p, dirEntry);
> }, fileFSError);
> } else
> if (cb) cb(de);
> };
> if (path) {
> var arPath = path.split("/");
> fnGetOrCreateDir(arPath, directory.filesystem.root);
> } else {
> if (cb) cb(directory);
> }
> }
> fileGetDir(STATIC_CONTENT_DIR, onSuccess);
> }, fileFSError);
> function fileFSError(e) {
> console.log(e.code);
> try {
> console.log("fileFSError: " + JSON.stringify(e) + errorCode(e));
> fail(e);
> } catch (err) {
> fail(err);
> }
> }
> function onSuccess(dirEntry) {
> console.log(dirEntry.fullPath);
> success(dirEntry.fullPath)
> }
> });
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@cordova.apache.org
For additional commands, e-mail: issues-help@cordova.apache.org