使用Cordova Hybrid应用程序将文件复制到路径

时间:2018-10-05 15:10:38

标签: javascript android performance cordova sapui5

上下文:我正在使用Cordova 6和SAPUI5 Framework开发混合应用程序(目前仅需担心Android)。

我想要的:快速将文件复制/移动到路径中。也许是从sapui5上的FileEntry的File / Blob对象中获取了FileUploader

输入FileUploader

输出:文件对象 因此,我通过执行以下操作选择了文件:

sap.ui.getCore().byId('file-uploader-id').oFileUpload.files[0];

因此,我必须将其复制到另一个位置:“ cordova.file。externalCacheDirectory”。但是FileUploader不会为所选项目(for security reasons)提供完整路径值。

我尝试过的事情

        var sPath = URL.createObjectURL(oFile);
        var pCopyFrom = new Promise((resolve, reject) => {
            window.resolveLocalFileSystemURL(sPath, resolve, reject);
        });

        var pCopyTo = new Promise((resolve, reject) => {
            var sExternalCachePath = cordova.file.externalCacheDirectory;
            window.resolveLocalFileSystemURL(sMediaPath, resolve, reject);
        });

        Promise.all([pCopyFrom, pCopyTo]).then(aValues => {
            aValues[0].moveTo(aValues[1], aValues[0].name, cbSuccess, cbError);
        });

结果

解决方案似乎不起作用,因为生成的路径不可用(错误代码5),该路径对于这样使用无效。

可能的解决方案

  • 通过另一种方式提取文件对象的路径。
  • 使用另一个可以提供此路径的输入(直到现在我没有找到任何输入)。
  • 在电话上使用文件名或大小或递归查找文件的路径。

目前的解决方案是什么(但确实很慢)

FileWritter写入文件。如果我有路径,并且将上面的代码用于视频(持续时间为5秒),则它会花费不到1秒(感谢FileEntry)来复制/移动(使用使用cordova-plugin-media-capture进行摄像头捕获或视频捕获以提供文件的路径),而使用FileWritter方法则需要花费 10秒钟之类的时间来编写文件。

感谢您的阅读。我将上传所有新内容。

1 个答案:

答案 0 :(得分:2)

最终的解决方案是我对问题说的第二个选项,更改输入法:

使用名为FileUploader的插件代替使用File Selector作为输入。

您可以获得FileName, URI ,Mime类型和文件扩展名

所以现在我可以使用FileEntry更快地移动/复制文件。

无论如何,如果我发现与此主题相关的内容,我将更新此答案。

谢谢。