我想要的:快速将文件复制/移动到路径.也许从sapui5上的FileUploader从File/Blob对象获取FileEntry.
输入:FileUploader
输出:文件对象所以我通过执行以下操作选择它时得到文件:
sap.ui.getCore().byId('file-uploader-id').oFileUpload.files[0];
Run Code Online (Sandbox Code Playgroud)
所以我必须将它复制到另一个位置:" 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);
});
Run Code Online (Sandbox Code Playgroud)
结果:
解决方案似乎不起作用,因为生成的路径不可用(错误代码5),此路径无效,因此使用它.
可能的方法:
目前的解决方案是什么(但真的很慢):
使用FileWritter编写文件.如果我有路径并且我将上述代码用于视频(持续5秒),则花费不到1秒(感谢FileEntry)来复制/移动它(使用摄像头捕获或使用cordova插件进行视频捕获-媒体捕获 …
我想知道是否存在类似于Java 8(目前在Android上)的JavaScript的“ Promise.all”。我正在尝试使所有回调都完成,然后执行第二个过程。
现在,我正在使用的回调是lambdas表达式,但是我愿意接受一些建议来更改执行回调的方式以及所有回调完成后执行的“大回调”。
我用一个回调计数器来实现,即当该回调计数器等于回调的长度时,则调用大回调。但是我确信这种解决方案不是正确的。
我是javascript的新手,根据我对javascript的了解,下面的问题应该返回1,但它返回"undefined".谁能告诉我为什么它不会返回1?
var foo = {
bar: function() { return this.baz; },
baz: 1
};
(function(){
return typeof arguments[0]();
})(foo.bar);
Run Code Online (Sandbox Code Playgroud)