cordova-plugin-filepath:无法将URI解析为文件路径

时间:2016-01-21 13:44:53

标签: cordova ionic-framework filepath

通过 cordova-plugin-camera 方法navigator.camera.getPicture()从我的设备文件系统中选择视频文件后,该函数返回类似'content://media/external/video/media/7319'(android)的URI。

必须通过 cordova-plugin-file-transfers 功能' upload()'将其转换为文件上传文件路径。 (仅接受本机路径或数据:URI)。数据:URI是没有选项,因为我们必须传输相当大的文件(5MB +),转换为base64需要太长时间。

根据开发人员的说法,最近issue会阻止解析操作。

还有其他方法可以同时适用于android / ios吗?或者我是否必须放弃cordova-plugin-file-transfer以获取其他上传方法?

1 个答案:

答案 0 :(得分:0)

有点晚了,但您可以使用cordova-plugin-file中建议的Cordova documentation代替 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);

}

注意:未经测试......