Проблема с URL Ionic File Chooser - PullRequest
       9

Проблема с URL Ionic File Chooser

0 голосов
/ 26 сентября 2018

Я использую этот плагин для получения файлов
https://ionicframework.com/docs/native/file-chooser/

Когда я выбираю файл PDF из папки Загрузки , он дает мне URI как content://com.android.providers.downloads.documents/document/1015

Но если я выберу другой файл, такой как ZIP или PNG , он будет преобразован в подходящий путь

content://com.android.providers.downloads.documents/document/raw%3A%2Fstorage%2Femulated%2F0%2FDownload%2Fwws.zip

content://com.android.providers.downloads.documents/document/raw%3A%2Fstorage%2Femulated%2F0%2FDownload%2Fopacity.png

Как мне получить путь изфайл в виде file://….

Я пробовал следующие подходы, но пока безуспешно:

FilePath.resolveNativePath

и

normalizeURL

ОБНОВЛЕНИЕ:

Импорт

import { File } from '@ionic-native/file';
import { FileChooser } from '@ionic-native/file-chooser'
import { FilePath } from '@ionic-native/file-path';

Код для выбора файлов:

  getAndroidFile() {

    this.fileChooser.open()
      .then(uri => {
        console.log("uri", uri);
        this.file.resolveLocalFilesystemUrl(uri).then((files) => {
          console.log("files", files);
        }).catch((error) => { console.log("error", error) });
        (<any>window).FilePath.resolveNativePath(uri, (result) => {
          this.nativepath = result;
          console.log("nativepath", this.nativepath);
        }, (err) => {
          console.log("err", err);
        })
      })
  }

Я использовал его, как предложил Аарон:

this.file.resolveLocalFilesystemUrl(uri).then((files)=>{
          console.log("files",files);
        }).catch((error) => { console.log("error", error) });

Он по-прежнему возвращается как:

filesystem: FileSystem {name: "content", root: DirectoryEntry}
fullPath: "/com.android.providers.downloads.documents/document/1015"
isDirectory: false
isFile: true
name: "1015"
nativeURL: "content://com.android.providers.downloads.documents/document/1015"

Исходный URL.

ОБНОВЛЕНИЕ 2:

getBase64Content(nativepath) {
let path = nativepath.substring(0, nativepath.lastIndexOf('/'));
let filename = nativepath.substring(nativepath.lastIndexOf('/'), nativepath.length);
filename = filename.replace("/", "");
console.log("path", path);
console.log("filename", filename);
this.file.readAsDataURL(path, filename)
  .then(content => {
    console.log('content1', content);
    //this will be passed to web API 
    this.base64content = content;

  })
  .catch(err => {
    console.log("err", err);
  })

}

Это содержимое base64 пересылается через сервер через APIи они конвертируют его обратно в файл.

ОБНОВЛЕНИЕ 3: Извините за поздний ответ, действительно занят другим проектом.Ответы для Кокена:

Как вы тестируете эту вещь?Какую команду вы используете для исполнения?Ionic Cordova запустить Android (я проверяю значения с помощью удаленной отладки с помощью Chrome.)

Эмулятор Android?Android-устройство?Android-устройство.Redmi note 5 pro (MIUI 10, Android 8.1).

Также ... каковы следующие шаги после выбора файла?Это содержимое base64 отправляется на сервер через API, и они преобразуют его обратно в файл.

Надеюсь, вы, ребята, можете мне помочь.С указанным кодом.Спасибо

1 Ответ

0 голосов
/ 26 сентября 2018

вам нужно resolveLocalFilesystemUrl из FileManager плагина

https://ionicframework.com/docs/native/file/#resolveLocalFilesystemUrl

...