Android 离子3-本机文件问题

Android 离子3-本机文件问题,android,file,cordova,ionic-framework,native,Android,File,Cordova,Ionic Framework,Native,我似乎找不到任何关于我在试图将相机拍摄的文件复制到数据存储时遇到的错误的信息。以下是我的功能(这几乎是每个人都会做的): 导致错误的行是:this.file.copyFile(… 在emulator或设备上运行时,我遇到的错误是: 错误错误:未捕获(承诺中):无效操作 爱奥尼亚信息: cli packages: (/Users/billb/dev/customer-mkt-app/node_modules) @ionic/cli-utils : 1.12.0 ionic (I

我似乎找不到任何关于我在试图将相机拍摄的文件复制到数据存储时遇到的错误的信息。以下是我的功能(这几乎是每个人都会做的):

导致错误的行是:this.file.copyFile(…

在emulator或设备上运行时,我遇到的错误是: 错误错误:未捕获(承诺中):无效操作

爱奥尼亚信息:

cli packages: (/Users/billb/dev/customer-mkt-app/node_modules)

    @ionic/cli-utils  : 1.12.0
    ionic (Ionic CLI) : 3.12.0

global packages:

    cordova (Cordova CLI) : 7.0.1

local packages:

    @ionic/app-scripts : 3.0.0
    Cordova Platforms  : android 6.2.3 ios 4.4.0
    Ionic Framework    : ionic-angular 3.3.0

System:

    Android SDK Tools : 26.1.1
    ios-deploy        : 1.9.0
    ios-sim           : 5.0.10
    Node              : v7.8.0
    npm               : 4.6.1
    OS                : macOS Sierra
    Xcode             : Xcode 9.0 Build version 9A235

Misc:

    backend : legacy

有什么想法吗?这个函数copyFileToLocalDir()基本上是从几个文件插件的示例中获得的,包括插件编写者。

以上David的评论促使我进一步挖掘并更好地理解文件插件所做的工作。多亏了这两个问题的答案,我终于明白了这一点。以下是我的最终代码:

copyFileToLocalDir() {
let d = new Date();
let n = d.getTime();
let newFileName =  n + ".jpg";
// cordova.file.dataDirectory
let externalStoragePath: string =  cordova.file.dataDirectory;

this.file.resolveLocalFilesystemUrl(this.imagePath + this.imageName)
  .then((entry: any)=>{
    console.log('entry',entry);

    this.file.resolveLocalFilesystemUrl(externalStoragePath)
      .then((dirEntry: any)=>{

        entry.copyTo(dirEntry, newFileName, this.successCopy, this.failCopy);

      }).catch((error)=>{
        console.log(error);
      });

  }).catch((error)=>{
    console.log(error);
  });
}


您必须创建两个对象,一个是当前文件(entry),另一个是复制文件的路径(dirEntry)。这是解决这个问题的关键。

您使用的是最新版本的ionic native吗?
copyFile
方法仅在ionic native中可用,然后转发到“真实”cordova文件插件的其他方法。可能插件已更改,而ionic native尚未更新。只是猜测:)是的,这是最近的一次。该文件的Ionic页面在i上显示copyFile在调用函数调用之前,您是否记录了函数调用的参数?尤其是
cordova.file.dataDirectory
似乎有点不对劲。我已经记录了其中的一些,但是我尝试了很多不同的修改,我不记得了。让我再做一次,看看我得到了什么。是的,所有的参数看起来都是正确的。你能告诉我这些this.successCopy和this.failCopy是从哪里来的吗。我必须回去翻阅所有这些代码,试着记住我们在这里做了什么。嘿,比尔..谢谢你重播我的问题通过你的解决方案解决了我刚刚删除了这个.successCopy和这个.failCopy,代码工作正常。再次感谢你
copyFileToLocalDir() {
let d = new Date();
let n = d.getTime();
let newFileName =  n + ".jpg";
// cordova.file.dataDirectory
let externalStoragePath: string =  cordova.file.dataDirectory;

this.file.resolveLocalFilesystemUrl(this.imagePath + this.imageName)
  .then((entry: any)=>{
    console.log('entry',entry);

    this.file.resolveLocalFilesystemUrl(externalStoragePath)
      .then((dirEntry: any)=>{

        entry.copyTo(dirEntry, newFileName, this.successCopy, this.failCopy);

      }).catch((error)=>{
        console.log(error);
      });

  }).catch((error)=>{
    console.log(error);
  });