2017-10-05 10 views
1

カメラで撮影したファイルをデータストレージにコピーしようとすると、エラーに関する情報が表示されないようです。イオン3 - ネイティブファイルの問題

import { File } from '@ionic-native/file'; 

// stuff here 

constructor(public navCtrl: NavController, public navParams: NavParams, private StorageProvider: StorageProvider, public viewCtrl: ViewController, private camera: Camera, public platform: Platform, private file: File{ 

} 

// other stuff here 

copyFileToLocalDir() { 

    let d = new Date(); 
    let n = d.getTime(); 
    let newFileName = n + ".jpg"; 
    console.log('new name',newFileName); 

    this.file.copyFile(this.imagePath, this.imageName, cordova.file.dataDirectory, newFileName) 
    .then(success => { 
     this.lastImage = newFileName; 
    }, error => { 
     console.log('error saving'); 
    }); 
} 

エラーの原因となって行は次のとおりです:this.file.copyFile(...

私はエラーここで(ほとんど誰もがやるように見えるものです)私の関数でありますエミュレータやデバイス上のいずれかで実行しているときに取得することです: ERRORエラー:キャッチされない(約束で):無効なアクション

イオンインフォメーション:

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()は、プラグインライターを含め、Fileプラグインのいくつかの例からかなり抜粋されています。

+0

ionic-nativeの最新バージョンを使用していますか? 'copyFile'メソッドはionic-nativeでのみ利用可能で、その後、「実際の」コードバスファイルプラグインの他のメソッドに転送されます。プラグインが変更され、ionic-nativeが更新されていない可能性があります。ちょうど推測:) – David

+0

はい、それは最新です。ファイルのIonicページにcopyFileが表示されます – Bill

+0

関数呼び出しのパラメータを呼び出す前にログに記録しましたか?特に 'cordova.file.dataDirectory'はちょっと見えません。 – David

答えて

2

上記のDavidのコメントから、Fileプラグインが何をしているのかをさらに深く理解することができました。そして、この2つの質問herehereの答えのおかげで、私はついにこのことを考え出しました。ここに私の最終的なコードです:

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); 
    }); 

}

あなたは2つのオブジェクト、(のDirEntry)にファイルをコピーするパスの現在のファイル(エントリ)と1つのものを作成する必要があります。それがこれを解決する鍵でした。

関連する問題