【问题标题】:How to save file in cordova project?如何在cordova项目中保存文件?
【发布时间】:2019-05-15 09:59:02
【问题描述】:

我正在尝试使用 cordova-plugin-file 保存文件。 该脚本似乎可以工作,但我无法在设备和 cdv 上找到该文件:引用似乎无法解析。

export const SaveFile = function(fFile, sFileName) {
    return new Promise((resolve, reject) => {
        console.log("requestFilesystem", fFile);
        window.requestFileSystem(
            LocalFileSystem.PERSISTENT,
            fFile.size,
            function(fs) {
                console.log("got fs", fs);
                fs.root.getFile(
                    sFileName,
                    { create: true, exclusive: false },
                    function(fileEntry) {
                        console.log("got fileentry", fileEntry);
                        fileEntry.createWriter(function(fileWriter) {
                            fileWriter.onwriteend = (eEvent) => {
                                console.log(
                                    `${ fileWriter.localURL } saved`,
                                    `${ fFile.size }kb`
                                );
                                resolve(fileWriter);
                            };

                            fileWriter.onerror = (eError) => {
                                console.error('onErrorCreateWriter', JSON.stringify(eError));
                                reject(eError);
                            };

                            fileWriter.write(fFile);
                        });
                    },
                    (eError) => {
                        console.error('onErrorCreateFile', eError);
                        reject(eError);
                    }
                );
            },
            (eError) => {
                console.error('onErrorLoadFs', eError.message);
                reject(eErroreError.message);
            }
        );
    });
};

我在日志中得到以下信息:

SaveFile.js:3 requestFilesystem Blob {size: 1707639, type: "video/webm"}
SaveFile.js:8 got fs FileSystem {name: "persistent", root: DirectoryEntry}
SaveFile.js:13 got fileentry FileEntry {isFile: true, isDirectory: false, name: "1eb4d914-3d81-a313-7744-bea86b90f042.mp4", fullPath: "/1eb4d914-3d81-a313-7744-bea86b90f042.mp4", filesystem: FileSystem, …}
SaveFile.js:16 cdvfile://localhost/persistent/1eb4d914-3d81-a313-7744-bea86b90f042.mp4 saved 1707639kb

所以它保存对了吗?但我没有看到 fs 和 cdvfile 上的视频:视频标签中的 ref 坏了。

试图在组件中消费文件的视频标签只是:

<video controls="" src="cdvfile://localhost/persistent/1eb4d914-3d81-a313-7744-bea86b90f042.mp4"></video>

【问题讨论】:

  • 你编译你的代码吗?我不认为 export const SaveFile 在 ES5 中工作......
  • (评论转发)我用 babel/webpack 编译
  • @Eric 知道文件可能发生了什么吗?
  • 显示您的代码在保存后如何加载文件
  • 我把它加到post里了,只是一个video标签,url字符串从promise出来redux然后作为prop传入另一个组件

标签: javascript android cordova html5-filesystem cordova-plugin-file


【解决方案1】:

最后,我发现了其他似乎可行的步骤。 我需要请求一个文件夹(它必须是缓存文件夹)才能在手机上找到文件。

export const SaveFile = function(fFile, sFileName) {
    return new Promise((resolve, reject) => {
        window.resolveLocalFileSystemURL(
            cordova.file.externalCacheDirectory,
            function(directoryEntry) {
                directoryEntry.getFile(
                    sFileName,
                    { create: true },
                    function(fileEntry) {
                        fileEntry.createWriter(
                            function(fileWriter) {
                                fileWriter.onwriteend = (eEvent) => {
                                    resolve(fileWriter.localURL);
                                };

                                fileWriter.onerror = (eError) => {
                                    console.error('onErrorCreateWriter', JSON.stringify(eError));
                                    reject(eError);
                                };

                                fileWriter.write(fFile);
                            },
                            (eError) => {
                                console.error('onErrorCreateFile', eError);
                                reject(eError);
                            }
                        );
                    }
                );
            }
        );
    });
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多