Почему именно Кордова?файл.documentsDirectory нулевое?


Я пытаюсь использовать cordova-plugin-file-transfer в http://ngcordova.com/docs/plugins/fileTransfer/

Пример кода для указания места загрузки выглядит следующим образом.

var targetPath = cordova.file.documentsDirectory + "testImage.png";
Однако этого свойства не существует. Я зарегистрировал console.log(JSON.stringify(cordova.file)) и получаю следующий вывод (форматированный).
{
    "applicationDirectory": "file:///android_asset/",
    "applicationStorageDirectory": "file:///data/data/com.ionicframework.mobile379071/",
    "dataDirectory": "file:///data/data/com.ionicframework.mobile379071/files/",
    "cacheDirectory": "file:///data/data/com.ionicframework.mobile379071/cache/",
    "externalApplicationStorageDirectory": "file:///storage/emulated/0/Android/data/com.ionicframework.mobile379071/",
    "externalDataDirectory": "file:///storage/emulated/0/Android/data/com.ionicframework.mobile379071/files/",
    "externalCacheDirectory": "file:///storage/emulated/0/Android/data/com.ionicframework.mobile379071/cache/",
    "externalRootDirectory": "file:///storage/emulated/0/",
    "tempDirectory": null,
    "syncedDataDirectory": null,
    "documentsDirectory": null,
    "sharedDirectory": null
}

Кроме того, я следовал некоторым намекам отсюда https://cordova.apache.org/docs/en/dev/cordova-plugin-file/ и изменил мой конфиг.xml с помощью следующее изменение.

<preference name="AndroidPersistentFileLocation" value="Internal" />
<preference name="iosPersistentFileLocation" value="Library" />
<preference name="iosExtraFilesystems" value="library,library-nosync,documents,documents-nosync,cache,bundle,root" />
<preference name="AndroidExtraFilesystems" value="files,files-external,documents,sdcard,cache,cache-external,root" />
Этот код работает не на эмуляторе или браузере, а на реальном устройстве android. Есть идеи, почему это свойство равно null?

Когда я пытаюсь загрузить файл, все, что я получаю, - это ошибка. Мой код выглядит следующим образом.

$cordovaFileTransfer.download(url, path, {}, true)
    .then(function(result) { 
      console.log(JSON.stringify(result));
    }, function(err) { 
      console.log(JSON.stringify(err));
    }, function(progress) { 
      console.log(JSON.stringify(progress));
    });

Это ошибка (форматированная).

{
    "code": 1,
    "source": "http://192.168.0.169/api/user/file/e95cdcfd541746b3b0721c992d756137",
    "target": "IMG_20160224_030826.jpg",
    "http_status": 200,
    "body": null,
    "exception": "/IMG_20160224_030826.jpg: open failed: EROFS (Read-only file system)"
}
Есть идеи по поводу того, что я делаю неправильно? Какой cordova.file.* я должен использовать, если documentsDirectory равно null?
1 4

1 ответ:

Насколько я проверил в плагине cordova file, cordova.файл.documentsDirectory не подходит для Android.

это описание упомянуто в официальной документации плагина cordova file в github:

" Кордова.файл.documentsDirectory - файлы, закрытые для приложения, но имеющие значение для других приложений (например, файлы Office). Обратите внимание, что для OSX это каталог пользователя ~/Documents. (iOS, OSX)"

Попробуйте Кордова.файл.externalDataDirectory или cordova.файл.externalRootDirectory для Android. Надеюсь, это поможет