我需要從Android中的文件系統讀取PDF以將其發送到服務器。但我似乎無法讀取有效的數據。如何在Android中讀取有效的base64文件? (cordova)
我試過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插件。
如果您需要從設備發送PDF到服務器,是否考慮過使用cordova-plugin-filetransfer來存檔您的目標? https://github.com/apache/cordova-plugin-file-transfer – Frix33
這是一個很好的觀點,但在這種情況下,由於用戶正在構建一條消息以發送到包含base64數據的服務器,因此這是不可能的。我需要首先將數據存儲在稍後與其他信息捆綁在一起的數據中。 – Dylan