上下文:我正在使用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秒钟之类的时间来编写文件。
感谢您的阅读。我将上传所有新内容。
答案 0 :(得分:2)
最终的解决方案是我对问题说的第二个选项,更改输入法:
使用名为FileUploader的插件代替使用File Selector作为输入。
您可以获得FileName, URI ,Mime类型和文件扩展名
所以现在我可以使用FileEntry更快地移动/复制文件。
无论如何,如果我发现与此主题相关的内容,我将更新此答案。
谢谢。