Javascript 使用Cordova Hybrid app将文件复制到路径
上下文:我正在开发Cordova 6和SAPUI5框架的混合应用程序(目前只需要担心Android) 我想要什么:快速将文件复制/移动到路径。可能是从sapui5上的文件/Blob对象获取 输入: 输出:文件对象 因此,当我通过执行以下操作选择文件时,我将获得该文件: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
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类型和文件扩展名 因此,现在我可以使用移动/复制文件更快 无论如何,我会更新这个答案,如果我发现一些相关的主题 谢谢