2017-07-27 96 views
3

我正在使用圖庫訪問要上傳的圖像。當我直接上載圖像uri時,我沒有任何問題,但是當我需要使用fileEntry(對於多部分上載)時,jpgs不會從它們的uri中返回fileEntry。 注:我使用異步:等待,但我有一個標準的承諾Ionic window.resolveLocalFileSystemURL不適用於jpgs

例如,以下是我使用來獲取圖像的URI

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

下面的代碼相同的問題是返回imageUri

try{ 
    return await this.camera.getPicture(options); 
}catch(err){ 
    ...handle error 
} 
takePicture()代碼

上述此代碼成功上傳既pngjpg文件。

下面的這段代碼無法僅爲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);是一個承諾包裝器window.resolveLocalFileSystemURL(imgUri, resolve, reject);它返回以下錯誤

FileError {code: 5}只有JPG格式。錯誤代碼意味着jpg的格式有問題嗎?這對我來說沒有任何意義,因爲所有這些都是在內部處理的。圖像沒有損壞或任何東西,所以它讓我相信,可能的錯誤代碼是誤導? error code docs

有沒有人遇到過這個問題?我正在測試一個活的android設備(不是模擬器)。

我覺得上面的演示表明圖像的uri不是問題,因爲它可以上傳圖像,當我不需要進入fileEntry時。但是,當我這樣做時,它僅適用於特定文件類型png s。

+0

我只在Android設備上遇到同樣的問題。我認爲'JPEG'不是導致問題的原因。 – JeffMinsungKim

+0

你認爲問題是什麼? @JeffMinsungKim – user3331142

+0

@JeffMinsungKim我找到了一個解決方案。問題是由jpgs camera.getPicture返回的路徑不是完整路徑(pngs返回完整路徑:include'file://') – user3331142

回答

0

此修復該問題

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

這個問題似乎是在Android某種原因相機庫不完整file://路徑所需科爾多瓦文件插件返回的JPG文件。

如果所有需要做的事情都在file://之前,這讓我想知道爲什麼jpgs還沒有發生。尤其是因爲它正在爲png正確地工作/返回文件路徑。

此外,cordova返回的錯誤代碼爲5會欺騙,因爲它似乎表明引用的文件存在問題,而不是路徑。

相關問題