Ionic FilePath 不起作用,如何获取 Android 11 的文件路径

Ionic FilePath not working, how to get the file path for Android 11

由于 Android 11.

,我已经阅读了 Android 的文件系统中的所有更改

这是我的问题。我正在使用 Ionic 中的 Android File Chooser 打开一个文件。 https://ionicframework.com/docs/native/file-chooser

 this.androidFileChooser
        .open({ mime: 'application/pdf' })
        .then((file) => {

这给了我这样的回应:"content://com.android.providers.downloads.documents/document/11654"

问题是我需要获取文件的真实位置以将其转换为 base 64,然后将其与 POST 请求一起发送到客户端服务器。 所以在出现所有这些问题之前,我使用的是 Ionic 的 Android 文件路径:https://ionicframework.com/docs/native/file-path

this.filePath.resolveNativePath(file).then((filePath) => {

我收到了 file:///storage/emulated/0/Download/pdffile.pdf 使用它,我可以在 base64 中转换它并且一切正常。

现在,它 returns 我对 Android 11 没有任何帮助。所以如果我没有这个文件路径,所有过程都无法进行。

您是否有 Angular/Ionic 的解决方案来获取文件的文件路径,Android 11?这是很有问题的。

我在我的 Ionic 5 应用程序中使用它,在 Android 11.

上测试过

首先,我在我的应用程序中调用下面的 getAsWebViewCorrectUrlMobile 以获取对本地文件的引用,然后我可以通过获取其内容将其转换为 base64 或其他格式。

      var url = this.getAsWebViewCorrectUrlMobile(inputFileUrl);
        
      this._http.get(url, { responseType: 'blob' }).toPromise().then(data => {
        resolve(data);
      }).catch(err => {
        if (err.status == 404) {
          alert('Could not find video file: ' + url);
        }
        resolve(null);
      });

文件方法:

import { Platform } from '@ionic/angular';

constructor(public _platform: Platform) {
    //...
}

getAsWebViewCorrectUrlMobile(fileUri: string) {
    if (this._platform.is('ios')) {
        return window.Ionic.WebView.convertFileSrc(fileUri);
    }
    else {
        // correct file paths on Android due to https://github.com/ionic-team/cordova-plugin-ionic-webview/issues/598
        var filePathCorrected = window.Ionic.WebView.convertFileSrc(fileUri);
        filePathCorrected = filePathCorrected.replace('file:/', "https://localhost/_app_file_/");
        return filePathCorrected;
    }
}

经过一些研究,Cordova 似乎并不针对 API30 及其范围内的新变化。为了解决我的问题,我使用了 Ionic Chooser,但是使用这个对于 Android 的 mimetype 是有问题的(当您将 mimetype 设置为 application/pdf 时,它允许从 Google Drive 上传图像) . 那是输赢。我希望 Cordova 插件维护者能为这些变化带来一些解决方案。

您需要安装以下插件

  1. @ionic-native/file-path'
  2. @ionic-native/file-chooser

它会给你

url: 内容://com.android.providers.downloads.documents/document/msf%3A29570

路径:文件:///storage/emulated/0/Download/flutter.pdf

      this.fileChooser
      .open()
      .then(url => {
        this.filePath.resolveNativePath(url)
          .then(filePath => {
                console.log('saif file pathhh',filePath);
          })
          .catch(err => console.log('saif file pathhh errorrr',err));
      })
      .catch(e => {
        console.log('saif file pathhh errorrr catchhh',e);
      });