2016-04-29 2 views
5

Я пытаюсь преобразовать изображение в base64. Я написал следующий код:Переменная не полностью загружена в javascript

if (file) 
{ 
    var reader = new FileReader(); 
    reader.onload = function(readerEvt) 
    { 
     alert(readerEvt.target.result); 
     var image  = readerEvt.target.result; 
     var base64image = image.split(',')[1]; 
     var key   = 'image'+i; 
     images[key]  = image; 
     //$('#image_preview').attr('src', readerEvt.target.result); 
    }; 
    reader.readAsDataURL(file); 
} 

Но когда я предупрежу readerEvt.target.result это говорит 131494 символов, но когда я загрузить его в переменный только 10001 символов загружаются. Это делает изображение неполным при декодировании назад с base64. Любая помощь будет оценена.

+0

Вы просмотрели это: http://stackoverflow.com/questions/6150289/how-to-convert-image-into-base64-string-using-javascript – dYale

+0

Base64image.length дает мне 131494 aprox charecters, но когда Я пытаюсь использовать оповещение, только 10001 загружается. Здесь есть ограничение? –

+0

Не должно быть. Я только что прошел тест, используя onload (а также onloadend), и они оба отлично работают, учитывая успешную загрузку, конечно, поскольку onloadend будет называться успешным или нет. Я попробовал его на размер файла более 3,5 Мб, и он загрузил данные в качестве base64 и заполнил изображение соответственно. – ManoDestra

ответ

2

Я пробовал аналогичный код с образцом кода, который вы пытались сделать выше, и это позволило мне загрузить локальный файл изображения в данные base64 и заполнить изображение соответственно, без ошибок. Попробуйте это ...

<input id="txtFile" type="file" onchange="loadFile();"> 
<br> 
<img id="imgTest"> 
<script> 
function loadFile() { 
    var file = document.getElementById('txtFile').files[0]; 
    if (file) { 
     var reader = new FileReader(); 
     reader.onload = function(readerEvt) { 
      var image = readerEvt.target.result; 
      var base64image = image.split(',')[1]; 
      console.log(readerEvt.target.result); 
      document.getElementById('imgTest').src = readerEvt.target.result; 
     }; 

     reader.readAsDataURL(file); 
    } else { 
     console.log('Exception'); 
    } 
} 
</script> 

Если это все еще не работает для вас, то есть, возможно, какая-то проблема с изображением, который вы пытаетесь загрузить.

+0

его работа с onload также, но то, что я хотел знать, является причиной того, что alert only отображает 10001 символ? –

+0

Изменен мой ответ. – ManoDestra