Ionic 3 Native:文件:代码:5,消息:“ENCODING_ERR”
Posted
技术标签:
【中文标题】Ionic 3 Native:文件:代码:5,消息:“ENCODING_ERR”【英文标题】:Ionic 3 Native : File : code: 5, message: "ENCODING_ERR"Ionic 3 Native:文件:代码:5,消息:“ENCODING_ERR” 【发布时间】:2018-02-05 05:20:55 【问题描述】:我在 Ionic 3 中使用checkFile function from File API plugin 来检查本地是否存在文件。 Promise 拒绝并出现以下错误:
FileError code: 5, message: "ENCODING_ERR"
根据我在Mozilla Docs of the File API 上看到的情况,问题是“URL 格式错误”。但是,我看不到 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);
);
这就是失败的 Promise。这种情况的奇怪之处在于,我实际上试图稍后在代码中显示该图像,忽略 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 的哪个实际部分看起来格式不正确。
【问题讨论】:
你从哪里得到这个值this.file.dataDirectory
?你也可以展示一下代码吗?
this.file
被注入到类的构造函数中,它是来自 Ionic Native API 的 File
类。因此,dataDirectory
是 ionicframework.com/docs/native/file/#dataDirectory
【参考方案1】:
在查看了类似案例后,我没有找到有关此特定案例的解决方案或文档。但是在尝试不同的值时,我发现了导致此错误的原因::
。是的,结肠。文件名中的那个。
虽然我仍然无法解释 为什么 :
会导致原生 File
插件失败,但不会导致 Web 视图失败,但从文件名中删除 :
可以有效地允许 File
无需提出ENCODING_ERR
即可查看。虽然这不是最佳解决方案,但此解决方法是有效的。
【讨论】:
"虽然我仍然无法解释为什么:导致本机文件插件失败" 冒号 (:) 是一个保留字符,不能在 Windows 系统的文件名中使用(但可以在Linux 系统)。也许是为了兼容性,文件插件保留了 Windows 和 Linux 系统上的所有字符。 (文件名中禁止使用的字符列表)[***.com/a/31976060/4511424] 我遇到了同样的问题。这并没有解决我的问题,但对于那些遇到它的人:我删除了我所有的平台ionic cordova platform rm ios
,删除了 plugins
目录并重新添加了 ios 平台,它再次工作
如果我们使用 base64 概念,我们该如何处理,例如数据:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,UEsD....... ?【参考方案2】:
在我的例子中,我让“File:///
”在路由中,现在它可以工作了。
【讨论】:
【参考方案3】:没有一个答案能解决我的问题。这很简单,我在 iOS 中使用了错误的目录来保存文件。我正在使用“缓存”,但一直收到错误
我改成
this.file.tempDirectory;
并且成功了!
【讨论】:
【参考方案4】:只需先创建简单文件名进行交叉检查。
就我而言,我使用的文件名不是正确的文件名。
出现同样错误的代码
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));
);
【讨论】:
【参考方案5】:确保您指向正确的目录以根据平台保存文件。我创建了这个实用程序来获取适用于 android 和 iOS 的正确目录:
getDeviceDirectoryToSaveFile(): string
if (this.platform.is('android'))
return this.file.externalDataDirectory;
else if (this.platform.is('ios'))
return this.file.applicationStorageDirectory+"/Documents";
【讨论】:
【参考方案6】:就我而言,这对我有用
resolveLocalFileSystemURL(`$cordova.file.externalDataDirectory.replace(/^file:\/\//g, '')record252202022149.3gp`, function(entry)
console.log(entry);
, (e) => console.error(e))
【讨论】:
以上是关于Ionic 3 Native:文件:代码:5,消息:“ENCODING_ERR”的主要内容,如果未能解决你的问题,请参考以下文章
解决 no compatible version found: ionic-native@^3.5.0
IONIC 3 无法使用@ionic-native/file-opener 在 Android 中打开 PDF 文件
使用 Firebase 云消息传递的 Ionic Native Push 崩溃