【问题标题】:Copy file to a path with Cordova Hybrid app使用 Cordova Hybrid 应用程序将文件复制到路径
【发布时间】:2018-10-05 15:10:37
【问题描述】:

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

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

输入: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】:

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

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

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

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

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

    谢谢。

    【讨论】:

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