给定一个路径,我如何实际获取一个文件,然后使用 Cordova 文件 API 读取 AsDataUrl?

Given a path, How do i actually get a file and then readAsDataUrl using Cordova File API?

我完全迷路了。按照这个例子,我不知道我是应该传递一个路径还是某个文件对象?

var reader = new FileReader();
    reader.onloadend = function(e){
        alert(e.target.result);
    };
reader.readAsDataURL(file);

"file" 应该是什么?如果它是某种类型的对象,有人可以告诉我如何创建一个给定文件路径的对象吗?我正在尝试使用此 https://github.com/mbppower/CordovaCameraPreview 拍照,然后上传结果。当我拍照时,系统会返回文件的完整路径,该文件可用作图像元素的 src 并已确认有效。

如果您有路径,您可以使用 resolveLocalFileSystemURL 获取一个 FileEntry 对象,然后您可以复制或移动它。

您还可以通过以下方式访问 File 对象:

resolveLocalFileSystemURL('assets-library://asset/asset.JPG?id=711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext=JPG', function(fileEntry) {
    fileEntry.file(function(file) {
        var reader = new FileReader(),
            data = null;
        reader.onloadend = function(event) {
            data = reader.result;
        };
        console.log('Reading file: ' + file.name);
        reader.readAsDataURL(file)
    });
});

我意识到这是一个老问题,但我发现它很有帮助,所以如果其他人需要帮助,请按以下步骤(使用 Promises):

鉴于您已经安装 cordova plugin add cordova-plugin-file

使用这个函数:

function filePathToDataUrl(filePath) {
    return new Promise(function (resolve, reject) {
        window.resolveLocalFileSystemURL(filePath, function (fileEntry) {
            fileEntry.file(function (file) {
                var reader = new window.FileReader();
                reader.onloadend = function() {
                  resolve(reader.result);
                };
                reader.readAsDataURL(file);
            }, function (fileEntryError) { reject('fileEntry.file error:' + JSON.stringify(fileEntryError, 0, 2)); });
        }, function (resolveFSError) { reject('resolveLocalFileSystemURL error:' + JSON.stringify(resolveFSError, 0, 2)); });
    });
}

现在您可以filePathToDataUrl(absFilePath).then(dataUrl => {…}).catch(console.error)