Devo inviare una stringa codificata base64
a un client. Pertanto, sto aprendo e leggendo un file immagine sul server, lo codifico e inviamo i dati insieme al tipo di contenuto image/jpeg
al browser. Esempio in PHP:Invio/Visualizzazione di un'immagine codificata Base64
$image = $imagedir . 'example.jpg';
$image_file = fopen($image, 'r');
$image_data = fread($image_file, filesize($image));
header("Content-type: image/jpeg");
echo 'data:image/jpeg;base64,' . base64_encode($image_data);
Clientside, sto chiamando:
var img = new Image();
img.src = "http://www.myserver.com/generate.php";
img.onerror = function(){alert('error');}
$(img).appendTo(document.body);
che non funziona per qualche motivo. onerror
spara sempre. Guardando il FireBug Network task
per esempio, mi dice che sto ricevendo le informazioni corrette dell'intestazione e un valore corretto dei byte trasferiti.
Se si inviano dati come Content-type: text/plain
, la stringa base64
viene visualizzata nel browser (se si chiama direttamente lo script). Copiando e incollando quell'output nello src
di un elemento <img>
viene mostrata l'immagine come previsto.
Cosa sto facendo di sbagliato qui?
Soluzione
Grazie Pekka
per me che indica sul mio errore. Non hai bisogno (non puoi!) Di codificare i dati di immagine binaria come stringa base64 in quel tipo di approccio. Senza codifica base64, funziona solo.
sembra che si dovrebbe essere impostando il valore dell'attributo 'src' al testo di risposta direttamente (' img.src = "data: image/jpeg; base64, ..." '... e il lato destro qui potrebbe essere un valore di ritorno da una chiamata Ajax) - altrimenti il browser proverà a richiedere un'immagine dall'URL che tu" re impostandolo su, che non funzionerà perché restituisce 'data: image ...' invece dei byte dell'immagine direttamente. –
Cosa vuoi fare? – Hello71
Non voglio il sovraccarico di una chiamata "ajax". Ne ho bisogno il più rapidamente possibile. Per ottenere qualche risultato di una 'risposta' ho bisogno di un'immagine valida per verificare la larghezza, ad esempio. – jAndy