Setzen des content-type auf blob
Sind wir transferieren Blob
(Bild) unten eine websocket und Rendern es auf eine Leinwand, auf der anderen Seite.
Wenn ich createObjectURL
mit dem blob, bekomme ich diese Warnung:
Resource interpreted as Image but transferred with MIME type text/plain: "blob:https%3A//example.com/demo".
Schaffen wir das URL-Objekt mit dem folgenden code. Der blob ist das senden über eine websocket-standard mit socket.binaryType = "blob";
auf der client-Seite:
socket.onmessage = function(e) {
var blob = e.data;
var url = (window.URL || window.webkitURL).createObjectURL(blob);
var image = document.createElement('img');
image.src = url;
}
Nur so kann ich denken, um diese Warnung zu beheben ist, erstellen Sie eine Kopie des blob mit dem folgenden code, aber ich will mich nicht vorstellen, der Aufwand für das kopieren aller Daten:
var blob = new Blob([e.data], {
type: 'image/gif'
});
Die Methode wird aufgerufen, Dutzende Male pro Sekunde.
Irgendwelche Ideen auf, wie die blob-Inhalts-Typ, ohne eine doppelte Blob
Objekt mit new Blob
?
- Können Sie zeigen, wie Sie senden Sie die blob-Daten? Beachten Sie, dass die
.binaryType
Eigenschaft ist nur wirksam, auf binäre Nachricht - wenn Sie das senden von Texten, dieevent.data
wird immer eine Zeichenfolge enthalten. - Es ist sehr einfach:
socket.send(message);
im Node JS Ende.message
ist ein binärer blob-Objekt aus einem OSX-app über SocketRocket (NSData
- Typ). Die Meldung ist definitiv eine binäreblob
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als erstes würde ich Frage mich, ob, wenn Sie sagen "Fehler" eigentlich bedeutet "Warnung". Sie sind wirklich zwei verschiedene Dinge sind und der browser Sie unterschiedlich behandelt (in der Regel nur die tracks/Warnungen, wenn die developer-tools geöffnet sind etc.).
Also erstmal würde ich die Herausforderung der Prämisse, dass dies sogar ein Problem ( der overhead des Browsers "auto-Eingabe" der blob versus overhead "newing" ein Blob etc ).
Aber, das heißt, ist der blob.type-Eigenschaft ist in der Tat inmutable in JavaScript und als solche Sie haben, um es, wenn der blob "newed". In deinem Fall klingt es wie Sie die Daten von einem Objective-C-Buchse, und nur daisy chaining Sie es nach unten über:
Den blob-Daten, die sich aus den Objective-C-Buchse ist nicht mit dem "header" geben Sie Daten des Typs, wenn es sendet es über, und es klingt wie Sie Ihre Knoten nicht berühren, die blob an alle (haben Sie versucht, die Dekoration der neuen Blob in Ihren Knoten und dann senden, dass die Steckdose, um zu sehen, wenn es behält sich das eingeben?).
Also, was geschieht ist, dass die websocket senden Sie einfach die blob-Daten so, wie Sie es bekam, und wenn der Empfang von javascript bekommt, ist es implizit, indem Sie es mit einem neuen Blob-Recht dann und dort, nur mit einem leeren Typ.
Also im Grunde keine, es scheint nicht zu irgendeiner Weise rund um die neue Blob-Bau, wenn Sie wirklich wollen, um loszuwerden, diese Warnung. Auch wenn Sie versuchte tricks wie das hinzufügen der Art in den blob-Daten und dann Spleißen Sie es aus etc, man kann immer noch nicht rund um die websocket-Empfang-code implizit zu schreiben, wie ein blob mit einem leeren Typ.
type
in Objective-C mitCGImageDestinationCreateWithData
(TypkUTTypeGIF
) aber scheint nicht durch zu gehen.blob
nativ. Weitere Gedanken auf, dass?Betrachten wir Sie haben Blob Instanz (
blob
). Sie können dannslice
Methode:... und das ist es.
Sondern erstellt nur neue blob mit den gleichen Daten, aber mit dem neuen Typ.
"Blob-URLs funktionieren nur mit GET-requests, und, wenn man erfolgreich angefordert, sendet der browser eine HTTP 200 OK status-code und sendet einen Content-Type-header verwendet, die das type-Eigenschaft des Blob."
Bin ich völlig aus hier?
Habe ich bekommen, das von https://www.inkling.com/read/javascript-definitive-guide-david-flanagan-6th/chapter-22/blobs
HTML5 Rocks scheint ein neuer Blob mit der Antwort von der XHR-Anfrage. So ist es vielleicht gar nicht so schlecht, nachdem alle. http://www.html5rocks.com/en/tutorials/file/xhr2/#toc-response
Nur werfen sich einige Ideen.
new Blob()
Lösung mit BlobBuilder, dies ist jedoch nicht obsolet: developer.mozilla.org/en-US/docs/Web/API/BlobBuilder, und würde noch erfordern kopieren von Speicher von einemArrayBuffer
(websocket-Daten), um die blob - glaube ich.Sie wahrscheinlich sollte setzen Sie Ihre Content-Typ auf der server-Seite, bevor es
console.log(e.data)
sowohl vor als auch nach der Einstellunge.data.type = 'image/gif'
zeigt, dass die Eigenschaft nicht ändern. Fügte einige mehr code der Frage.Lösen können Sie dieses problem aus der end-Sie liefern das Bild. Dieses problem geschieht, weil der falsche content-type, so konfigurieren Sie Ihren server zu senden, Bild mit Bild-Header.
Wenn dies in PHP haben, sollten Sie so etwas wie
(Nur gibt Ihnen eine Idee)
Im Falle von Node.js obwohl ich kein Experte bin, können Sie die Art des Inhalts, auf das response-Objekt, wie:
socket.send(message);
über diews
- Paket (version 0.4.x). Die Nachricht ursprünglich nur ein Binär-Paket aus einem anderen websocket Ursprung in Objective-C. Irgendwelche Ideen auf, wie dieContent-Type
in diesem Szenario?GET
Anfragen. In diesem Fall ist es alle websockets mitsocket.binaryType = 'blob'
😉