Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Cordova Hybrid app将文件复制到路径_Javascript_Android_Performance_Cordova_Sapui5 - Fatal编程技术网

Javascript 使用Cordova Hybrid app将文件复制到路径

Javascript 使用Cordova Hybrid app将文件复制到路径,javascript,android,performance,cordova,sapui5,Javascript,Android,Performance,Cordova,Sapui5,上下文:我正在开发Cordova 6和SAPUI5框架的混合应用程序(目前只需要担心Android) 我想要什么:快速将文件复制/移动到路径。可能是从sapui5上的文件/Blob对象获取 输入: 输出:文件对象 因此,当我通过执行以下操作选择文件时,我将获得该文件: sap.ui.getCore().byId('file-uploader-id').oFileUpload.files[0]; 因此,我必须将它复制到另一个位置:“.externalCacheDirectory”。但是FileU

上下文:我正在开发Cordova 6和SAPUI5框架的混合应用程序(目前只需要担心Android)

我想要什么:快速将文件复制/移动到路径。可能是从sapui5上的文件/Blob对象获取

输入

输出:文件对象 因此,当我通过执行以下操作选择文件时,我将获得该文件:

sap.ui.getCore().byId('file-uploader-id').oFileUpload.files[0];
因此,我必须将它复制到另一个位置:“.externalCacheDirectory”。但是FileUploader不为所选项目()提供完整路径值

我所尝试的

        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),此路径不能像这样使用

可能的解决方案

        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);
        });
  • 通过另一种方式提取文件对象的路径
  • 使用另一个可以提供此路径的输入(直到现在我还没有找到任何)
  • 使用文件名或大小或在电话中递归查找文件路径
当前的解决方案是什么(但速度非常慢)

        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秒)进行复制/移动(使用摄像机捕获或视频捕获提供文件的路径),而使用方法写入视频(持续时间为10秒)所花费的时间小于1秒


谢谢你的阅读。我将上传任何新的内容。

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

使用名为的插件,而不是使用作为输入

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

因此,现在我可以使用移动/复制文件更快

无论如何,我会更新这个答案,如果我发现一些相关的主题

谢谢