Ionic 3 Native:文件:{code:5,message:“ENCODING_ERR”}

时间:2017-08-28 00:35:30

标签: android ionic-framework ionic3

我正在使用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的实际部分看起来是不正确的。

5 个答案:

答案 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))