Wie man png-Binär-Daten in ein img-tag und zeigen Sie Sie als ein Bild?
Ich bin mit diesem
$.ajax({
type: "GET",
url: 'template/bump1/purse.png',
datatype:"image/png",
success: function (data) {
var reader = new FileReader();
reader.onload = function (e) {
var img = document.getElementById("CaptchaImg");
img.src = e.target.result;
};
reader.readAsDataURL(data);
//$('#CaptchaImg').attr('src', data);
}
});
herunterladen Sie ein Bild, und es kommt im binary suchen mag dieses
node.js ist es wieder wie
WriteHeaderMode('image/png', res, 200);
res.end(data, 'binary');
Aber jetzt, wie übertrage ich das in ein image-tag und zeigen Sie es als ein Bild. Hinweis: ich nicht haben wollen, Rückgabe der Daten als base64-Codierung, hat es sich als binäre. Im gut mit der Umwandlung der Binär-in base64-auf client-Seite aber.
Wenn ich an den readAsDataURL
sagt es TypeError
Ausnahme.
Dank
BEARBEITEN
var img = document.getElementById("CaptchaImg");
var reader = new FileReader();
reader.onload = function(e) {
//img.src = e.target.result;
$("body").html(e.target.result);
};
reader.readAsDataURL(new Blob([data]));
dies scheint eine Konvertierung in das base64-Codierung, die beginnt, als data:application/octet-stream;base64,
aber kein Bild anzeigt...
- Ich habe nicht recherchiert, so viel, aber ich vermute, da
application/octet-stream
ist im Grunde sagen "download me", könnte man versuchen, eine gerade.replace("application/octet-stream", "image/png");
. Lohnt sich ein Schuss lol - Ich habe es versucht, aber es hat nicht funktioniert.
- und zumindest ich weiß, ich war nicht verrückt für die Annahme, es. Aber anstatt zu versuchen, es zu reparieren als das problem, vielleicht versuchen, neu zu denken und die Logik? Nur durch die Einstellung der
src
- Attribut, um die Bild-URL werden Sie der download der das Bild so, dass anstelle von AJAX nur das tun, - Ich will nicht zu tun, weil ich kann es nicht hier, aber ich bin auch der Versand einer
FormData()
als eine Anlage, die hat ein Bild. d.h. ich versuche zum hochladen und laden Sie ein Bild in der gleichen ajax-call. - Ich habe versucht, Ihre Lösung, aber ich verwendet, eckig $http, und legen Sie responseType auf "blob". Dann hat es geklappt mit deiner Lösung, aber mit
reader.readAsDataURL(data.data);
. Die tatsächlichen Daten einer Immobilie auf das response-Objekt. Ich bin mir nicht sicher, ob dies ist nur ein Unterschied, wie jQuery und angular arbeitet.
Du musst angemeldet sein, um einen Kommentar abzugeben.
jQuery Ajax nicht unterstützt binäre Antworten(okay jetzt funktioniert es), gibt es einen trick, verwendet overrideMimeType('text/plain; charset=x-user-defined'), um jedes byte als ein Zeichen in der Antwort-string und dann eine Schleife durch die response zu erstellen ein byte-array mit den Daten.
Jedoch mit nackten XMLHttpRequest dies kann leicht getan werden mit der Nutzung der responseType Eigenschaft.
Musa ' s Antwort ist eine großartige Lösung, das ich umgesetzt habe etwas ähnliches auch in eckig und funktioniert großartig, wenn Sie definieren
responseType = 'blob'
Ihre Antwort wird nicht ein string mehr, es wird ein blob-Typ-Objekt.Ich brauchte nur zu fügen Sie einen zusätzlichen parameter an die Header-Objekt (nicht sicher, ob es notwendig ist, in jQuery).
headers: {'Content-Type': "image/png"}
,Meine vollständigen request-Objekt:
Versuchen Sie es mit
new Blob(data, {type : 'image/png'})
stattnew Blob([data])
Dadurch wird sichergestellt, dass der media-Typ der blob ist ein png.
Quelle: https://developer.mozilla.org/en-US/docs/Web/API/Blob
ajax()
ist im Grunde eine Erweiterung des BrowsersXMLHttpRequest()
. Aber ich werde denke mal, dass das die Antwort, die Sie bekam, von diesem Antrag zu Ihren nodejs script. Dann hast du ein problem, da es scheint nicht zu einem gültigen Datensatz für ein Bild und noch weniger für die eine base64-codierte nichts.Was framework/lib du verwendest:
File
), bitten Sie um einen BLOB-Typsrc
zu dieser URLCode:
Wenn Sie irgendwann entscheiden, dass das Bild nicht mehr nützlich, vergessen Sie nicht, um es zu reinigen:
URL.revokeObjectURL(yourUrl)