Android 离子文件选择器URL问题

Android 离子文件选择器URL问题,android,ionic-framework,ionic3,ionic-native,Android,Ionic Framework,Ionic3,Ionic Native,我正在使用此插件获取文件 当我从下载文件夹中选择一个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%2

我正在使用此插件获取文件

当我从下载文件夹中选择一个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

更新:

进口

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);
        })
      })
  }
它仍然返回为:

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: 很抱歉迟回复,真的很忙的另一个项目。 Koken的答案:

你怎么测试这个东西? 执行时使用的是什么命令? 爱奥尼亚科尔多瓦运行安卓系统 (我通过使用chrome进行远程调试来检查这些值。)

Android仿真器?安卓设备? 安卓设备。RedMiNote5Pro(MIUI10,安卓8.1)

还有。。。选择文件后的下一步是什么? 此base64内容通过api发送到服务器,服务器将其转换回文件


希望你们能帮助我。给出了代码。谢谢

您需要
文件管理器
插件中的
resolveLocalFilesystemUrl


嗨,亚伦,我已经按照你说的做了,但得到的回应是一样的。你可以在这里检查我的答案
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"
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);
  })