Плагин Cordova File readAsDataURL завершается неудачно с кодом: 2 SECURITY_ERR на Android - PullRequest
0 голосов
/ 09 января 2019

В настоящее время я пытаюсь реализовать функцию чата в Ionic 4, которая включает в себя возможность прикреплять файлы. Для этого я использую плагин FileChooser. Затем я хотел бы получить закодированное в base64 содержимое файла через URI, предоставленный FileChooser. Однако я не могу заставить вызов readAsDataURL работать.

Я уже пытался использовать плагин Base64, но он всегда возвращает пустую строку без контекста для того, что пошло не так. Я также попробовал несколько способов предоставления / разбиения пути, но либо файл не был найден вообще, либо появилась та же проблема, что и в текущей версии. Я также проверил свой AndroidManifest.xml, и он содержит

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
так же как
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Этот код я использую, чтобы прочитать содержимое выбранного URI:
handleUri (uri : string) {
  let $this = this;
  console.log("URI: "+uri);
  $this.file.resolveLocalFilesystemUrl(uri).then(
    (entry) => {
      let fileEntry = <FileEntry> entry;
      fileEntry.file( 
        (file) => {
          let path      : string = fileEntry.toURL();
          let mimeType  : string  = file.type
          let dirPath   : string = path.substr(0,path.lastIndexOf('/') + 1);
          let fileName  : string = path.substr(path.lastIndexOf('/') + 1);
          console.log("DirPath: "+dirPath);
          console.log("FileName: "+fileName);
          $this.file.checkFile(dirPath,fileName).then(
            (exists) => {
              console.log("File does "+( exists ? "" : "not ")+ "exist");
            }
          );
          $this.file.readAsDataURL(dirPath,fileName).then(
            (string) => {
              console.log("ReadAsDataURL: "+string);
            },
            (error) => {
              console.log("ReadAsDataURL failed: "+JSON.stringify(error));
            }
          );
        }
      )
    },
    (error) => {
      console.log(JSON.stringify(error));
    }
  )
}

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

...