【发布时间】:2017-05-02 08:57:02
【问题描述】:
我在 ionic v2 应用程序中将输入文件对象转换为 Base64 时遇到问题。这个问题在使用 onload/onloadend 阅读器时特别会出现,因为它只是偶尔被调用(最罕见的非常具体)。
当用户单击触发 attachFile 函数的图像文件时,我能够获取文件名、大小和对象,但之后当我使用 FileReader 将文件对象转换为 Base64 时 - onload 或 onloadend 回调函数很少被调用并且文件对象没有因此被转换为 Base64。
文件输入:
<input #fileInput type="file" accept="image/*" (change)="attachFile($event)">
附加文件:
attachFile(fileInput: any)
{
let fileList: FileList = fileInput.target.files;
// I can access the selected file name, size and object correctly without any issues
console.log("File name = " + fileList[0].name);
console.log("File size = " + fileList[0].size);
console.log("File = " + fileList[0]);
// Converting the file input to base 64 (This rarely works)
this.convertFileToBase64AndSet(fileList);
}
Base64 转换:
convertFileToBase64AndSet(fileList: FileList)
{
if(fileList.length > 0)
{
var reader = new FileReader();
reader.onloadend = (e: Event) => {
console.log(reader.result);
}
reader.readAsDataURL(fileList[0]);
}
}
如果这完全不起作用,我可以理解,但在我的 Android 手机中调用 onload/onloadend 回调并成功将对象转换为 Base64 的情况很少见。
- 包括 onerror 在内的任何回调都不会被调用,除非像我之前提到的那样是最罕见的情况。
- Web 浏览器中的相同代码运行良好,回调成功调用并将文件对象转换为 Base64。
所以这给我留下了很少的选择,我无法找到为 Angular 2 量身定制的体面的 Base64 转换插件,因为周围的大多数插件都只适用于旧的 Angular。
一个这样的角度插件有很大的希望 - angular-base64-upload 但我无法弄清楚如何在角度 2 中运行它,因为说明是专门针对旧角度的。
肯定有办法达到这个要求,任何线索都将受到高度赞赏。
我的要求也是 Base64 转换插件不应该依赖于任何文件路径,应该直接转换从用户选择的文件输入中得到的文件对象。强>
P.S:我已经在 stackoverflow 中看到了关于 FileReader 回调的所有答案,但到目前为止没有一个对我有用。
【问题讨论】:
标签: angular ionic-framework ionic2 filereader