javascript - 使用 Cordova Hybrid 应用程序将文件复制到路径
问题描述
上下文:我正在使用 Cordova 6 和 SAPUI5 框架开发混合应用程序(现在只需要担心 Android)。
我想要什么:快速将文件复制/移动到路径。也许从 sapui5 上的FileUploader的 File/Blob 对象获取FileEntry。
输入:文件上传器
输出:文件对象因此,当我通过执行以下操作选择文件时,我得到了文件:
sap.ui.getCore().byId('file-uploader-id').oFileUpload.files[0];
所以我必须将它复制到另一个位置:“ cordova.file.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),此路径对于像这样使用它是无效的。
可能的解决方案:
- 用另一种方式提取文件对象的路径。
- 使用可以提供此路径的另一个输入(直到现在我还没有找到)。
- 使用文件名或大小或在手机上递归查找文件的路径。
目前的解决方案是什么(但真的很慢):
使用FileWriter写入文件。如果我有路径并且我将上面的代码用于视频(持续时间为 5 秒),则它花费不到 1 秒(感谢FileEntry)来复制/移动它(使用相机捕获或带有cordova-plugin- 的视频捕获提供文件路径的媒体捕获),而使用FileWritter方法时,它会花费大约10 秒的时间来编写它。
感谢您的阅读。我会上传任何新的,因为我有它。
解决方案
最终的解决方案是我在问题上说的第二个选项,改变输入法:
不要使用FileUploader作为输入,而是使用一个名为File Selector的插件。
您可以获取 FileName、URI、Mime 类型和文件扩展名
所以现在我可以使用FileEntry更快地移动/复制文件。
无论如何,如果我发现与此主题相关的内容,我将更新此答案。
谢谢。
推荐阅读
- https - 通过 esp-idf 使用 https 请求与电报机器人通信
- excel - 功能颜色匹配特定条件的单元格
- amazon-web-services - 在本地运行 Amazon EventBridge
- vue.js - 尝试将输入元素绑定到vue页面中的数据值
- json - 将json转换为飞镖
- javascript - 如何在 Selenium Webdriver 中使用 Java Script 中的 for 循环单击 n 次
- javascript - 不确定为什么 .load() 完成事件不起作用
- php - 使用准备好的语句时如何指定日期作为输入
- python - Python中1.3+0.13的计算
- php - PHP http_response_code($code) 在完全错误的 if 语句中执行