Я пытаюсь прочитать файл изображения и изменить его размер и загрузить его в Ionic2 на Android. Мой код работает для изображений небольшого размера, но для изображений с более чем 3 Мбайт функция onloaded никогда не вызывается.Изображение файла onloaded не вызывается после вызова readAsDataURL на больших изображениях
Я действительно ценю любую помощь или понимание относительно того, почему.
makeFileIntoBlob(_imagePath) {
return new Promise((resolve, reject) => {
window.resolveLocalFileSystemURL(_imagePath, fileEntry => {
fileEntry.file(file => {
var reader = new FileReader();
console.log('Reading the file!');
reader.onloadend = (e: any) => {
var img = document.createElement("img");
img.onload =() => {
//---> Only get here for small images!
var resizedImg = this.imgResizerSrvc.resize(img, 480, 480);
var imgBlob: any = this.dataURLtoBlob(resizedImg);
imgBlob.name = 'sample.jpg';
console.log('makeFileIntoBlob resolved!');
resolve(imgBlob);
}
//Will trigger img.onloadend
alert("about to trigger");
img.src = e.target.result; //----> This call only triggeres reader.onloadend for small images
alert("Done trigger");
};
reader.readAsDataURL(file);
});
});
});
}
В качестве альтернативы, я также попробовал чтение файла, используя следующие:
img.src = (window.URL ? URL : window.webkitURL).createObjectURL(file);
или
img.src = (window.URL || window.webkitURL || window || {}).createObjectURL(file);
, но ни один из них не триггером img.onloaded().
Что делает '.dataURLtoBlob'? Что делает 'this.imgResizerSrvc.resize (img, 480, 480),' return? Может существовать ограничение на '.length'' URI данных '. Использует ли '.this' элемент' .onload' 'img'? – guest271314
Они предназначены для изменения размера и преобразования в blob. Моя проблема прямо сейчас заключается в том, что я даже не добираюсь до тех функций, которые вызывают, поэтому проблема не должна быть там. Этот код является функцией-членом компонента в ionic2, поэтому я ожидал, что '.this' ссылается на этот компонент. Но опять же, моя проблема заключается в том, что 'img.onload' даже не вызван. – Ari
'' '' '' '' событие 'img'' '' 'будет' 'элемент. Может существовать ограничение на '.length'' URI данных '. Вы можете использовать 'Blob' вместо' data URI'. 'file' - это объект' File', да? – guest271314