我正在使用Ionic 3中的checkFile function from File API plugin来检查文件是否存在于本地。 Promise拒绝了以下错误:
FileError {code:5,message:“ENCODING_ERR”}
从我在Mozilla Docs of the File API上看到的问题是“网址格式错误”。但是,我不知道URL是如何格式错误的。以下是显示我如何调用函数以及所涉及变量的实际值的相关代码(baseDirectory
的值设置为file:///data/user/0/ch.protectator.fehpedia/files/
):
let baseDirectory = this.file.dataDirectory;
let fileToCheck = "File:Icon Portrait Abel.png";
let promise = this.file.checkFile(this.file.dataDirectory, fileName).then(bool => {
// Things
}, reason => {
console.error(reason);
});
那就是失败的承诺。这种情况的奇怪之处在于我实际上试图稍后在代码中显示该图像,忽略File.checkFile是否找到它,并且图像显示。
在HTML模板中,我稍后使用:
<img [src]="imgUrl">
使用以下设置imgUrl
:
this.imgUrl = this.file.dataDirectory + '/' + "File:Icon Portrait Abel.png";
因此,当WebView调用时,图像存在并正确显示,但Native File插件告诉我URL格式错误,即使对我来说它似乎是完全相同的URL。这就是我被困住的地方,我不知道要改变什么代码才能工作。 checkFile
应该以不同的方式使用吗?另外,更准确的失败原因会有所帮助,但我得到的只是ENCODING_ERR
,我不知道URL的实际部分看起来是不正确的。
答案 0 :(得分:10)
在查看类似案例后,我找不到有关此特定案例的解决方案或文档。但在尝试使用不同的值时,我发现了导致此错误的原因::
。是的,结肠。文件名中存在的那个。
虽然我仍然没有解释为什么 :
导致原生File
插件失败而不是网络视图,从文件名中删除:
有效地允许File
在不提出ENCODING_ERR
的情况下查看它。虽然这不是最佳解决方案,但这种解决方法很有效。
答案 1 :(得分:0)
就我而言,我在路由中使用了“ File:///
”,现在它可以正常工作了。
答案 2 :(得分:0)
没有一个答案可以解决我的问题。这很简单,我使用了错误的目录在iOS中保存文件。我当时使用的是“缓存”,但始终收到错误消息
我更改为
this.file.tempDirectory;
工作了!
答案 3 :(得分:0)
只需交叉检查,首先创建简单的文件名。
就我而言,我使用的文件名不是正确的文件名。
出现相同错误的代码
const fileName = localStorage.getItem(appGlobals.UserData.email) + '_' + new Date() + '.mp3';
this.file.createFile(this.file.dataDirectory, fileName, true)
.then((fileEntry: FileEntry) => {
//do something with the file
}).catch(err => {
alert(JSON.stringify(err));
});
更改后的代码
const fileName = localStorage.getItem(appGlobals.UserData.email) + '_' + new Date().getTime() + '.mp3';
this.file.createFile(this.file.dataDirectory, fileName, true)
.then((fileEntry: FileEntry) => {
// do something with the file
}).catch(err => {
alert(JSON.stringify(err));
});
答案 4 :(得分:0)
对于我来说,这对我有用
resolveLocalFileSystemURL(`${cordova.file.externalDataDirectory.replace(/^file:\/\//g, '')}record252202022149.3gp`, function(entry) {
console.log(entry);
},(e)=> console.error(e))