2016-01-21 46 views
1

通過科爾多瓦 - 插件相機 S分析navigator.camera.getPicture()採摘從我的設備文件系統中的視頻文件後,該函數返回一個URI像'content://media/external/video/media/7319'(機器人)。科爾多瓦 - 插件,文件路徑:無法解析URI作爲文件路徑

這具有通過科爾多瓦-插件-文件傳輸函數「upload()」(:URI,它接受唯一的本地路徑或數據)被轉換成用於文件上傳的文件路徑。數據:URI是沒有選擇的,因爲我們必須傳輸相當大的文件(5MB +),轉換成base64的時間太長了。

據開發人員介紹,最近有一個issue,它阻止瞭解析操作。

是否有任何其他方法可以在android/ios上工作?或者我是否必須放棄另一種上傳方法的cordova-plugin-file-transfer?

+0

你有沒有檢查過https://github.com/apache/cordova-plugin-camera? 這個插件有一個選項來返回文件路徑,它可以用來輕鬆地將文件傳輸到服務器。順便說一句你使用離子框架?如果是這樣的話,請嘗試使用這個插件http://ngcordova.com/docs/plugins/capture/它的記錄! – 404

+0

@ 404感謝您的評論,但cordova-plugin-camera是我現在使用的插件(應該提到這一點)。 是的我正在使用離子,但ngCordova /../捕獲不提供從設備存儲加載文件的方法。根據文檔,它只能從相機記錄新文件。 – Ammul

回答

0

晚了一點,但你可以使用的cordova-plugin-file代替科爾多瓦,插件,文件路徑的建議在Cordova documentation

navigator.camera.getPicture(function cameraSuccess(imgUri) { 
    uploadPicture(imgUri); 
}, function cameraError(error) { 
    console.debug("Unable to obtain picture: " + error, "app"); 
}); 

function uploadPicture(imgUri) { 
    var uploadUrl = ...; 
    var success = ...; 
    var fail = ...; 
    var options = ...; 

    var fileEntry = getFileEntry(imgUri); 
    var fileTransfer = new FileTransfer(); 
    fileTransfer.upload(fileEntry.toURL(), encodeURI(uploadUrl), success, fail, options); 
} 

function getFileEntry(imgUri) { 
    window.resolveLocalFileSystemURL(imgUri, function success(fileEntry) { 
     return fileEntry; 
    }, function() { 
     // If don't get the FileEntry (which may happen when testing 
     // on some emulators), copy to a new FileEntry. 
     return createNewFileEntry(imgUri); 
    }); 
} 

function createNewFileEntry(imgUri) { 
    window.resolveLocalFileSystemURL(cordova.file.cacheDirectory, function success(dirEntry) { 
     // JPEG file 
     dirEntry.getFile("tempFile.jpeg", { create: true, exclusive: false }, function (fileEntry) { 
     return fileEntry; 
    }, onErrorCreateFile); 
}, onErrorResolveUrl); 

}

注:未測試...