我需要从Android中的文件系统中读取PDF才能将其发送到服务器。但我似乎无法读取有效数据。
我尝试readAsDataURL
因为它似乎是最快的。但是返回的值(删除MIME类型后)是无效的base64。
// read the file from the filesystem
window.resolveLocalFileSystemURL(path,
function (fileEntry) {
fileEntry.file(function (file) {
var reader = new FileReader();
reader.onloadend = function (evt) {
// test base64 is valid
var patt = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;
var b64 = evt.target.result.split(",", 2)[1];
console.log("is valid base64? " + patt.test(b64)); // false!
var bytes = atob(b64); // Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.
};
//reader.readAsText(file);
reader.readAsDataURL(file);
},
function (err) {
console.error(err);
});
}, function (err) {
console.error(err);
});
我还尝试了readAsText
然后将其转换为base64,但对于大型PDF文件而言,这种速度非常慢,而且当翻译后的数据无效时。
为什么来自readAsDataURL
的base64无效?我试过多个Android设备(有和没有人行横道)。使用最新版本的file插件。
答案 0 :(得分:0)
这是Cordova文件插件的已知和报告问题。
当base 64编码大文件时, FileReader readAsDataURL
会出现问题。使用的过程如下:
结果不是有效的base64编码字符串,而是一个由多个有效的base64编码字符串组成的字符串。
一种解决方法而不是解码结果是将数据拆分为256K块的一部分,单独解码每个块,然后您将能够重新编码整个字符串。
关于the issue,它被标记为影响Android 4.4.2但问题仍存在于Android 5& 6.关于决议,它仍未分配给任何人。