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

问题描述 投票:5回答:1

上下文:我正在使用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秒钟来编写它。

谢谢你阅读。我会上传任何新的,因为我有它。

javascript android performance cordova sapui5
1个回答
2
投票

最后的解决方案是我在问题上说的第二个选项,改变了输入法:

不使用FileUploader作为输入,而是使用名为File Selector的插件。

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

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

无论如何,如果我找到与此主题相关的内容,我会更新此答案。

谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.