2016-04-29 20 views
5

Sto cercando di convertire l'immagine in base64. Ho scritto il seguente codice:La variabile non è caricata in modo incompleto in 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); 
} 

Ma quando allertare il readerEvt.target.result si dice 131494 personaggi, ma quando carico ad una variabile solo 10001 caratteri viene caricato. Ciò rende l'immagine incompleta quando decodificata da base64. Qualsiasi aiuto sarà apprezzato.

+0

Hai guardato attraverso questo: http://stackoverflow.com/questions/6150289/how-to-convert-image-into-base64-string-using-javascript – dYale

+0

La base64image.length mi dà 131494 caratteri di aprox ma quando cerco di usare l'avviso solo 10001 viene caricato. C'è una limitazione qui? –

+0

Non ci dovrebbe essere. Ho appena eseguito un test utilizzando onload (così come onloadend) ed entrambi funzionano bene, dato un carico di successo, ovviamente, come onloadend sarà chiamato in caso di successo o meno. Ho provato su una dimensione di file di oltre 3,5 Mb e ha caricato i dati come base64 e popolato un'immagine di conseguenza. – ManoDestra

risposta

2

Ho provato un codice simile all'esempio di codice che hai provato sopra e mi ha permesso di caricare un file di immagine locale in dati di base64 e popolare un'immagine di conseguenza, senza errori. Prova questo ...

<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> 

Se ancora non funziona per voi, allora forse c'è qualche problema con l'immagine che si sta tentando di caricare.

+0

funziona anche con onload ma quello che volevo sapere è perché l'avviso mostra solo 10001 caratteri? –

+0

Modificata la mia risposta. – ManoDestra