2017-01-08 7 views
0

Cordova file pluginを使用してモバイルデバイスに保存されたイメージを読み込もうとしていますので、リモートで保存する必要があります。問題は、File Entryオブジェクトを提供するはずのresolveLocalFilesystemUrl()メソッドがEntryオブジェクトを返すように見えることです。つまり、ファイルを呼び出すことができません。Ionic 2プロジェクトでコードバファイルプラグインを使用してファイルを読み取ることができません

ここでは、File Entryオブジェクトを取得する必要があるコードを使用して、ファイルメソッドを使用してファイル自体を読み取ることができます。

MediaCapture.captureImage().then((images)=>{ 
    self.image = images[0].localURL; 
    File.resolveLocalFilesystemUrl(self.image).then((entry)=>{ 
    entry.file(function (file) { 
     var reader = new FileReader(); 

     reader.onloadend = function (encodedFile) { 
     var src = encodedFile.target.result; 
     src = src.split("base64,"); 
     var contentAsBase64EncodedString = src[1]; 
     }; 
     reader.readAsDataURL(file); 
    }) 
    }).catch((error)=>{ 
    console.log(error); 
    }) 
}) 

私は、次の活字体エラーを取得し、resolveLocalFilesystemUrl()は、ファイルのメソッドを持っていませんEntryオブジェクト、で解決された私に語っているのです。 (プラグインのドキュメントはresolveLocalFilesystemUrlは、ファイルエントリオブジェクトに解決し、そのようなオブジェクトは間違いなくファイル自体を提供するファイルメソッドを持っていると言う):

Property 'file' does not exist on type 'Entry'. 

私はresolveLocalFilesystemUrl()を提供していますパスの種類を試してきました。 cdvfile:// localhost/temporary/filenameの行に沿って、/ var/mobile/Applications/Documents/path/to /ファイルとローカルURLの行に沿って完全なパスを試してみたところ

quesitonはなぜ私にFile Entryオブジェクトを提供するのか、それをどうやって解決するのでしょうか?より一般的には、上記のアプローチがうまくいかない場合、Ionic 2のファイルをどのようにして読むことができますか?

ありがとうございました!

答えて

0

これは、resolveLocalFilesystemUrlwindowオブジェクトの機能でありファイルではないためです。

MediaCapture.captureImage().then((images)=>{ 
    self.image = images[0].localURL; 
    window.resolveLocalFilesystemUrl(self.image).then((entry)=>{ 
    entry.file(function (file) { 
     var reader = new FileReader(); 

     reader.onloadend = function (encodedFile) { 
     var src = encodedFile.target.result; 
     src = src.split("base64,"); 
     var contentAsBase64EncodedString = src[1]; 
     }; 
     reader.readAsDataURL(file); 
    }) 
    }).catch((error)=>{ 
    console.log(error); 
    }) 
}) 

それとも、同じプラグインhere

+0

に呼び出されるようにするためにencodedFile: anyを使用していたノート。私は実際問題がTypescriptに関連していることを発見しました - エントリが任意の型であることを指定すると、問題は解決し、関数は正常に動作します。私は他の人の参照のための答えを追加します... –

5

のイオンネイティブバージョンを使用することができ、私はこの問題は活字体に関連していたことを発見しました。 resolveLocalFilesystemUrl()は実際にFile Entryオブジェクトで解決されましたが(ファイルパスとしてローカルURLを渡したとき)、TypescriptはEntryオブジェクトであり、file()が呼び出されるとは思わなかったと思います。

entryオブジェクトは任意のタイプである可能性があることをTypescriptに伝えることで、問題を解決しました。そのため、関数またはプロパティを呼び出すことができます。

MediaCapture.captureImage().then((images)=>{ 
    self.image = images[0].localURL; 
    File.resolveLocalFilesystemUrl(self.image).then((entry: any)=>{ 
    entry.file(function (file) { 
     var reader = new FileReader(); 

     reader.onloadend = function (encodedFile: any) { 
     var src = encodedFile.target.result; 
     src = src.split("base64,"); 
     var contentAsBase64EncodedString = src[1]; 
     }; 
     reader.readAsDataURL(file); 
    }) 
    }).catch((error)=>{ 
    console.log(error); 
    }) 
}) 

私もtarget.resultは私がファイルにresolveLocalFilesystemUrlを呼んでプラグインのイオンネイティブバージョンを使用していますencodedFile

関連する問題