2017-07-27 8 views
3

ギャラリーを使用してアップロードする画像にアクセスしています。私は画像uriを直接アップロードしているときに問題はないが、fileEntry(マルチパートアップロードの場合)を使用する必要があるとき、jpgはURIからfileEntryを返さない。 注:私は非同期を使用していますが、次は私がIonic window.resolveLocalFileSystemURLがjpgsで動作しない

var imageUri = await this.takePicture(Object.assign(this.defaultOptions,{sourceType:this.camera.PictureSourceType.SAVEDPHOTOALBUM})); 
let newFile = new File([imageUri], "filename"); 
this.uploadFile(newFile); 

画像URIを取得するには、以下を使用しているコードです。たとえば待っていたが、私は、標準的な約束

と同じ問題を持っていますimageUri

try{ 
    return await this.camera.getPicture(options); 
}catch(err){ 
    ...handle error 
} 
を返し takePicture()するためのコードである

上記のこのコードが正常両方pngとアップロードファイル。

このコードでは、jpg個のファイルのfileEntryを取得できません。

/** 
    * Returns a file entry for the image uri provided 
    * @param imgUri image Uri to get file entry for 
    */ 
    private async getFileFromImageUri(imgUri){ 
    try{ 
     var fileEntry = await this.resolveFileAsPromise(imgUri); 
    }catch(err){ 
     // fileEntry = await this.createNewFileEntry(imgUri); 
     this.presentToast('Error while selecting image.'); //TODO: images that are .jpg seem to have trouble being resolved to a file. 
    } 
    return fileEntry;  
    } 

resolveFileAsPromise(ImgUri);それが唯一のJPGのために、次のエラー

FileError {code: 5}を返しwindow.resolveLocalFileSystemURL(imgUri, resolve, reject);ための約束ラッパーです。エラーコードは、jpgのフォーマットに何らかの問題があったことを意味しますか?これはすべてが内部で処理されているので、私には意味をなさない。画像が壊れていないか、何もないので、エラーコードが誤解を招く可能性があると私は信じています。 error code docs

誰でもこの問題が発生しましたか?私はライブアンドロイドデバイス(エミュレータではない)でテストしています。

私はfileEntryにアクセスする必要がないときにイメージをアップロードするためにイメージuriが問題ではないことを示していると感じます。しかし、私がそうするとき、それは特定のファイルタイプpngだけのために働く。

+0

Android搭載端末でのみ同じ問題が発生しています。私は「JPEG」は問題の原因ではないと思う。 – JeffMinsungKim

+0

問題は何と思いますか? @JeffMinsungKim – user3331142

+0

@JeffMinsungKim解決策を見つけました。問題は、jpgs camera.getPictureによって返されるパスがフルパスではありませんでした(pngsがフルパスを返します: 'file://'を含む) – user3331142

答えて

0

これは、問題はコルドバファイルプラグインのために必要に応じて、Android上で何らかの理由でカメラのライブラリーが完全file://パスでのJPGを返さないことであると思われる問題に

var imageUri = await this.camera.getPicture(options); 
#FIX 
if(this.platform.is('android') && !imageUri.includes("file://")) { 
    imageUri = `file://${imageUri}`; 
} 
var fileEntry = await this.resolveFileAsPromise(imgUri); 

を修正します。

すべてが完了する必要がある場合は、前にfile://と表示されているため、なぜjpgのためにそれが起こっているのか不思議です。特にpngのためにファイルのパスを正しく返しているからです。

また、エラーコード5を返すコードバは、パスではなく参照されているファイルに問題があると思われるため、欺かれています。

関連する問題