簡體   English   中英

cordova-plugin-filepath:無法將URI解析為文件路徑

[英]cordova-plugin-filepath: unable to resolve URI as file path

通過cordova-plugin-camera的方法navigator.camera.getPicture()從我的設備文件系統中選擇一個視頻文件后,該函數將返回一個URI,例如'content://media/external/video/media/7319' (android)。

必須通過cordova-plugin-file-transfers函數' upload() '(僅接受本機路徑或data:URI)將其轉換為文件上傳路徑。 data:URI是沒有選擇的,因為我們必須傳輸相當大的文件(5MB +),而將其轉換為base64會花費太長時間。

根據開發人員的說法,最近有一個問題阻止解決操作。

還有其他兩種方法都可以在android / ios上使用嗎? 還是我不得不放棄cordova-plugin-file-transfer的另一種上傳方法?

有點晚了,但是您可以按照Cordova文檔中的建議使用cordova-plugin-file而不是cordova-plugin-filepath

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

}

注意:未經測試...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM