Tuesday, 17 October 2017

Javascript Blob Typ Binary Options


Die atob-Funktion decodiert eine base64-codierte Zeichenfolge in eine neue Zeichenfolge mit einem Zeichen für jedes Byte der binären Daten. Jeder Zeichencodepunkt (charCode) ist der Wert des Bytes. Wir können ein Array von Byte-Werten erstellen, indem wir dies mit der Methode. charCodeAt für jedes Zeichen in der Zeichenfolge anwenden. Sie können dieses Array von Byte-Werten in ein reelles typisiertes Byte-Array konvertieren, indem Sie es an den Uint8Array-Konstruktor übergeben. Dies wiederum kann in einen Blob umgewandelt werden, indem er ihn in ein Array umwandelt, das es an den Blob-Konstruktor übergibt. Der obige Code funktioniert. Allerdings kann die Leistung ein wenig durch die Verarbeitung der ByteCharacters in kleineren Scheiben, anstatt alle auf einmal verbessert werden. In meiner groben Prüfung 512 Bytes scheint eine gute Scheibe Größe zu sein. Das gibt uns folgende Funktion. Volles Beispiel:. Oder ES6: beantwortet Apr 26 13 at 21:51 Beachten Sie, dass atob isn39t unterstützt von IE9 und unten, nur IE10. Aber dann trifft das auch auf typisierte Arrays und Blobs zu, so. -) ndash T. J. Crowder Apr 26 13 at 21:55 Für besser performace (getestet auf FF20) verwenden, anstatt aufrufen Array. prototype. map. call (slice, charCodeFromCharacter) und prealocate Array byteNumbers neue Array (slice. length). Ndash dherbolt Ich bemerkte, dass Internet Explorer 11 wird unglaublich langsam, wenn das Schneiden der Daten wie jeremy vorgeschlagen. Dies trifft auf Chrome zu, aber IE scheint ein Problem zu haben, wenn die geschnittenen Daten an den Blob-Konstruktor übergeben werden. Auf meiner Maschine, übergeben 5 MB Daten macht IE Absturz und Speicherverbrauch geht durch das Dach. Chrome schafft den Blob in kürzester Zeit. Führen Sie diesen Code für einen Vergleich: Also habe ich beschlossen, beide Methoden, die von jeremy in einer Funktion. Credits gehen zu ihm für dieses. Lösung von Jeremy Banks arbeitete für mich. Allerdings musste ich Hilfe von anderen Quellen bekommen, da ich mit ng-flow zum Hochladen von Bildern. Wenn die Webseite geladen wird und die Bilder aus der Datenbank abgerufen werden, müssen diese Bilder dem flow. files-Array hinzugefügt werden. Die Bilder werden in Datenbank mit Base64-Zeichenfolge gespeichert. Also, während der Seite laden, die einzige Möglichkeit für mich war, Base64-String zu Blob zu konvertieren und fügen Sie die Dateien zurück zum flow. files-Array. Dadurch konnte der Flusscontroller ordnungsgemäß funktionieren, nachdem die Seite aus der Datenbank geladen wurde. Im Folgenden finden Sie die folgenden Schritte: Fügen Sie die Befehlszeile load-photo hinzu und fügen Sie sie dem Eingabeelement additionalimage1 hinzu, das die Base64-Zeichenfolge aus Datenbank auf document ready-Ereignis mit jQuery geladen hat. Fügen Sie eine Richtlinie für den Zugriff auf das Element hinzu und rufen Sie scope function scope. loadPhoto auf Dokument, das bereit ist, das Foto zu laden. Konvertieren Sie in Lade-Foto-Funktion das Base64 in Blob, und fügen Sie die Datei dem Flußsteuerelement hinzu. Stellen Sie sicher, dass die Bereichsvariable scope. imageStringB64 und das Eingabeelement additionalimage1 manuell synchronisiert werden, da ng-model nicht wie erwartet funktioniert. Dies liegt daran, jQuery-Code außerhalb angular Laden der Eingabe-Element aus Datenbank, und ich fand heraus, dass sie nicht gebunden sind dynamisch. Siehe dieses Codebeispiel für weitere Optionen, um Base64-Image zu blob und zurück zu Base64 konvertieren: Arbeiten mit Dateien in JavaScript, Teil 5: Blobs Posted in June 5, 2012 von Nicholas C. Zakas Bis zu diesem Punkt hat diese Reihe von Posts konzentriert Auf die Interaktion mit Dateien, die vom Benutzer spezifiziert sind und über File-Objekte aufgerufen werden. Das File-Objekt ist tatsächlich eine spezifischere Version eines Blob. Was einen Teil der binären Daten darstellt. Die Größen - und Typ-Eigenschaften sind auf Blob-Objekten vorhanden und werden von File vererbt. In den meisten Fällen können Blob s und File s an denselben Stellen verwendet werden. Beispielsweise können Sie mit einem FileReader aus einem Blob lesen und mit URL. createObjectURL () eine Objekt-URL aus einem Blob erstellen. Slicing Eines der interessanten Dinge, die Sie mit Blobs (und damit auch Files) tun können, besteht darin, ein neues Blob basierend auf einem Unterabschnitt eines anderen zu erstellen. Da jeder Blob nur Zeiger auf Daten anstelle der Daten selbst darstellt, können Sie schnell neue Blob-Objekte erstellen, die auf Unterabschnitte anderer zeigen. Dies geschieht durch die Verwendung der Methode slice (). Sie können vertraut mit slice () auf Strings und Arrays, und die für Blob s verhält sich in einer ähnlichen Weise. Die Methode akzeptiert drei Argumente: den Offset des Startbytes, den Offset des Endbyte und einen optionalen MIME-Typ, der auf den Blob angewendet werden soll. Wenn der MIME-Typ isn8217t angegeben ist, hat der neue Blob den gleichen MIME-Typ wie der ursprüngliche. Browser-Unterstützung für slice () isn8217t noch ubiquitär, mit Firefox unterstützt es über mozSlice () und webkitSlice () in Chrome (keine anderen Browser unterstützen diese Methode derzeit). Hier ein Beispiel: Mit dieser Funktion können Sie z. B. eine große Datei aufteilen, um sie in Chunks hochzuladen. Jeder neue Blob, der hergestellt wird, ist unabhängig von dem Original, obwohl die Daten jeder Referenzen eine Überlappung aufweisen. Die Ingenieure bei Flickr verwenden Blob-Slicing, um die Exif-Informationen von Fotos zu lesen, die 1 hochgeladen werden, anstatt darauf zu warten, dass sie auf dem Server. Wenn die Datei ausgewählt ist, beginnt die Flickr-Upload-Seite gleichzeitig, die Datei hochzuladen und die Exif-Informationen aus dem Foto zu lesen. Dies ermöglicht es ihnen, eine Vorschau der extrahierten Metadaten auf der Seite zu geben, während die Datei hochgeladen wird. Schaffung von Blobs die alte Art Sehr bald, nachdem File-Objekte in Browsern erschienen, erkannten die Entwickler, dass Blob-Objekte tatsächlich ziemlich mächtig waren und sie in der Lage wären, sie ohne Benutzerinteraktion zu erstellen. Schließlich können alle Daten in einem Blob dargestellt werden. Es doesn8217t müssen unbedingt an eine Datei gebunden werden. Browser reagierten schnell, indem sie BlobBuilder. Ein Typ, dessen einziger Zweck es ist, einige Daten in einem Blob-Objekt einzuhüllen. Dies ist ein nicht standardmäßiger Typ und wurde in Firefox (als MozBlobBuilder), Internet Explorer 10 (als MSBlobBuilder) und Chrome (als WebKitBlobBuilder) implementiert. Der BlobBuilder arbeitet, indem er eine neue Instanz erstellt und die Append () - Methode mit einem String ArrayBuffer aufruft. Oder Blob. Nachdem alle Daten hinzugefügt wurden, rufen Sie getBlob () auf und übergeben einen optionalen MIME-Typ, der auf Blob angewendet werden soll. Hier ein Beispiel: Die Möglichkeit, URLs für beliebige Datenmengen zu erstellen, ist unglaublich mächtig, sodass Sie dynamisch Objekte erstellen können, die als Dateien im Browser angesprochen werden können. Sie könnten beispielsweise einen Blob verwenden, um einen Web-Worker zu erstellen, ohne eine separate Datei für den Worker-Code zu haben. Diese Technik wurde in The Basics of Web Workers 2 geschrieben: Dieser Code erstellt ein einfaches Skript und erstellt dann eine Objekt-URL. Die Objekt-URL wird einem Web-Worker anstelle einer Skript-URL zugewiesen. Sie können append () beliebig oft aufrufen, indem Sie den Inhalt des Blobs aufbauen. Erstellen von Blobs die neue Art und Weise Weil Entwickler für eine Art und Weise, Blob-Objekte direkt zu erstellen, und Browser, die mit BlobBuilder auftauchen, schimpften. Wurde beschlossen, einen Blob-Konstruktor hinzuzufügen. Dieser Konstruktor ist nun Teil der Spezifikation und wird die Art sein, wie Blob-Objekte in der Zukunft erstellt werden. Der Konstruktor akzeptiert zwei Argumente. Die erste ist ein Array von Teilen, die in ein Blob zu kombinieren. Dies sind die gleichen Werte, die in die append () - Methode von BlobBuilder übergeben werden, und kann eine beliebige Anzahl von Strings, Blobs und ArrayBuffers sein. Das zweite Argument ist ein Objekt, das Eigenschaften für den neu erzeugten Blob enthält. Es sind derzeit zwei Eigenschaften definiert, type. Die den MIME-Typ des Blobs angibt. Und Endungen. Die entweder 8220transparent8221 (Standard) oder 8220native8221 sein kann. Hier ein Beispiel: Wie Sie sehen können, ist dies viel einfacher als mit BlobBuilder. Der Blob-Konstruktor befindet sich derzeit in den nächtlichen Builds von Chrome und wird in Firefox 13 sein. Andere Browser haben noch keine Pläne zur Implementierung dieses Konstruktors angekündigt, sind aber nun Teil des File API 3-Standards und sollen allgemein implementiert werden. Fazit Dies ist der letzte Teil der Serie über die Arbeit mit Dateien in JavaScript. Wie ich hoffe, Sie haben gelernt, die Datei-API ist unglaublich mächtig und eröffnet völlig neue Möglichkeiten der Arbeit mit Dateien in Web-Anwendungen. Sie müssen nicht mehr mit einfachen Datei-Upload-Boxen bleiben, wenn Benutzer Dateien hochladen müssen, und nun können Sie die Dateien im Client lesen, die alle Möglichkeiten für die clientseitige Manipulation eröffnet. Sie konnten ein Bild verkleinern, das vor dem Hochladen zu groß ist (mit FileReader und ltcanvasgt), können Sie einen Texteditor erstellen, der ausschließlich im Browser arbeitet, um große Dateien aufzuteilen, um Stück für Stück hochzuladen. Die Möglichkeiten sind endlos, aber ziemlich verdammt nah. Referenzen Haftungsausschluss: Alle Ansichten und Meinungen in diesem Artikel sind die von Nicholas C. Zakas und nicht in keiner Weise widerspiegeln die meines Arbeitgebers, meine Kollegen, Wrox Publishing. OReilly Verlagswesen. Oder jemand anderes. Ich spreche nur für mich, nicht für sie. Aktuelle Beiträge Zusätzliche InformationenJavaScript Blob. Object Blobs sind unveränderliche Objekte, die Rohdaten repräsentieren. Datei ist eine Ableitung von Blob, die Daten aus dem Dateisystem repräsentiert. Verwenden Sie FileReader, um Daten aus einem Blob oder einer Datei zu lesen. Blobs ermöglichen es Ihnen, Datei wie Objekte auf dem Client zu konstruieren, die Sie an apis übergeben können, die URLs erwarten, anstatt dass der Server die Datei bereitstellt. Beispielsweise können Sie einen Blob erstellen, der die Daten für ein Bild enthält, URL. createObjectURL () verwenden, um eine URL zu generieren und diese URL an HTMLImageElement. src zu übergeben, um das Bild anzuzeigen, das Sie erstellt haben, ohne mit einem Server zu sprechen. KonstruktorenSenden und Empfangen von Binärdaten Binäre Daten mit JavaScript-typisierten Arrays empfangen Die Eigenschaft r esponseType des XMLHttpRequest-Objekts kann so eingestellt werden, dass der erwartete Antworttyp vom Server geändert wird. Mögliche Werte sind die leere Zeichenfolge (default), arraybuffer. Klecks. Dokument. Json Und Text. Die Response-Eigenschaft enthält den Entity-Body nach responseType. Als ArrayBuffer. Klecks. Dokument. JSON. Oder String. Dies ist null, wenn die Anforderung nicht vollständig ist oder nicht erfolgreich war. Dieses Beispiel liest ein Bild als Binärdatei und erstellt aus den Rohbytes ein vorzeichenloses Integerarray mit 8 Bit. Beachten Sie, dass dies nicht decodiert das Bild und lesen Sie die Pixel. Sie benötigen eine png Dekodierungsbibliothek für das. Eine Alternative zu dem obigen Verfahren verwendet die Blob-Schnittstelle, um direkt einen Blob mit den Arraypuffersignalen zu konstruieren. Sie können auch eine Binärdatei als Blob lesen, indem Sie den String-Blob auf die Eigenschaft responseType setzen. Empfangen von Binärdaten in älteren Browsern Die unten gezeigte Funktion loadbinaryresource () lädt Binärdaten aus der angegebenen URL und gibt sie an den Aufrufer zurück. Die Magie geschieht in Zeile 5, die den MIME-Typ überschreibt und zwingt den Browser, ihn als Klartext zu behandeln, wobei ein benutzerdefinierter Zeichensatz verwendet wird. Dies sagt dem Browser nicht zu analysieren, und die Bytes durch unbearbeitet vergehen lassen. Das obige Beispiel holt das Byte im Offset x innerhalb der geladenen Binärdaten ab. Der gültige Bereich für x ist von 0 bis filestream. length-1. Empfangen von binären Daten beliebig jBinary-Bibliothek für die Arbeit mit binären Daten in JavaScript ermöglicht das Laden von Daten aus jeder Quelle mit automatisch erkannt besten unterstützten Weg auf aktuelle Browser oder Node. js: Senden von binären Daten Die Sende-Methode der XMLHttpRequest wurde erweitert, um eine einfache Übertragung zu ermöglichen Von binären Daten durch Annehmen eines ArrayBuffers. Klecks. Oder Datei-Objekt. Das folgende Beispiel sendet erstellt eine Textdatei on-the-fly und verwendet die POST-Methode, um die Datei an den Server zu senden. In diesem Beispiel wird einfacher Text verwendet, Sie können sich aber vorstellen, dass die Daten eine binäre Datei sind. Senden von typisierten Arrays als Binärdaten Sie können auch JavaScript-typisierte Arrays als binäre Daten senden. Dies ist der Aufbau einer 512-Byte-Array von 8-Bit-Integern und Senden Sie können alle binären Daten, die Sie verwenden, wie, natürlich. Hinweis: Unterstützung für das Senden von ArrayBuffer-Objekten unter Verwendung von XMLHttpRequest wurde zu Gecko 9.0 (Firefox 9.0 / Thunderbird 9.0 / SeaMonkey 2.6) hinzugefügt. Fügen Sie hier Informationen zu anderen Browsern hinzu. Einreichen von Formularen und Hochladen von Dateien Firefox-spezifische Beispiele Dieses Beispiel überträgt den Binärinhalt asynchron unter Verwendung der POST-Methode und FireFoxs non-standard sendAsBinary (). Zeile 4 setzt den Content-Length-Header auf 741, was bedeutet, dass die Daten 741 Byte lang sind. Offensichtlich müssen Sie diesen Wert basierend auf der tatsächlichen Größe der gesendeten Daten ändern. Zeile 5 verwendet die sendAsBinary () - Methode, um die Anforderung zu initiieren. Hinweis: Diese nicht standardmäßige sendAsBinary-Methode gilt als abgelehnt ab Gecko 31 (Firefox 31 / Thunderbird 31 / SeaMonkey 2.28) und wird demnächst entfernt. Die Standard-Sende - (Blob-Daten-) Methode kann stattdessen verwendet werden, wie oben erläutert. Sie können auch binären Inhalt senden, indem Sie eine Instanz des nsIFileInputStream an send () übergeben. In diesem Fall müssen Sie das Content-Length-Header nicht selbst setzen, da die Informationen automatisch vom Stream abgeholt werden: Document Tags und ContributorsA Ein Blob-Objekt repräsentiert ein dateibasiertes Objekt mit unveränderlichen Rohdaten. Blobs repräsentieren Daten, die nicht unbedingt in einem JavaScript-nativen Format vorliegen. Die Datei-Schnittstelle basiert auf Blob. Blob-Funktionalität erbt und erweitert, um Dateien auf dem Benutzersystem zu unterstützen. Verwenden Sie den Blob () - Konstruktor, um einen Blob aus anderen Nicht-Blob-Objekten und Daten zu konstruieren. Um einen Blob zu erstellen, der eine Teilmenge von anderen Blobs-Daten enthält, verwenden Sie die Methode slice (). Informationen zum Erhalten eines Blob-Objekts für eine Datei im Dateisystem des Benutzers finden Sie in der Datei-Dokumentation. Die APIs, die Blob-Objekte akzeptieren, sind ebenfalls in der Datei-Dokumentation aufgelistet. Anmerkung: Die Methode slice () hatte zunächst als zweites Argument Länge angegeben, um die Anzahl der Bytes anzugeben, die in das neue Blob kopiert werden sollen. Wenn Sie Werte angegeben haben, sodass die Startlänge die Größe des Quellblob überschritten hat. Der zurückgegebene Blob enthielt Daten vom Startindex bis zum Ende des Quellblob. Hinweis: Beachten Sie, dass die slice () - Methode Hersteller-Präfixe auf einigen Browsern und Versionen hat: blob. mozSlice () für Firefox 12 und früher und blob. webkitSlice () in Safari. Eine alte Version der slice () - Methode ohne Herstellerpräfixe hatte eine andere Semantik und ist veraltet. Die Unterstützung für blob. mozSlice () wurde mit Firefox 30 gelöscht. Konstruktor Blob (blobParts, options) Gibt ein neu erstelltes Blob-Objekt zurück, dessen Inhalt aus der Verkettung des im Parameter angegebenen Wertebereichs besteht. Eigenschaften Blob. isClosed Read only Ein boolescher Wert, der angibt, ob die Blob. close () - Methode auf dem Blob aufgerufen wurde. Geschlossene Blobs können nicht gelesen werden. Blob. size Read only Die Größe der in dem Blob-Objekt enthaltenen Daten in Bytes. Blob. type Read only Eine Zeichenfolge, die den MIME-Typ der im Blob enthaltenen Daten angibt. Wenn der Typ unbekannt ist, ist dieser String leer. Methoden Blob. close () Schließt das Blob-Objekt, wobei möglicherweise die zugrunde liegenden Ressourcen freigegeben werden. Blob. slice (start, end, contentType) Gibt ein neues Blob-Objekt zurück, das die Daten im angegebenen Bytesbereich des Quellblob enthält. Beispiele Blob-Konstruktor Beispiel Verwendung Der Blob () - Konstruktor erlaubt es, Blobs aus anderen Objekten zu erzeugen. Zum Beispiel, um einen Blob aus String zu konstruieren: Vor der Verfügbarkeit des Blob-Konstruktors könnte dies durch die BlobBuilder-API erreicht werden, die jetzt veraltet ist: Beispiel für das Erstellen einer URL für ein typisiertes Array mit einem Blob Der folgende Code: Beispiel für das Extrahieren Daten aus einem Blob Die einzige Möglichkeit, Inhalte aus einem Blob zu lesen, ist ein FileReader zu verwenden. Der folgende Code liest den Inhalt eines Blob als ein typisiertes Array. Mit anderen Methoden von FileReader. Ist es möglich, den Inhalt eines Blob als String oder als Daten-URL zu lesen. Spezifikationen 1 Eine Version von slice (), die die Länge als zweites Argument einnimmt, wurde in WebKit und Opera 11.10 implementiert. Weil sich diese Syntax jedoch von Array. slice () und String. slice () unterscheidet. WebKit entfernt Unterstützung und unterstützt die neue Syntax als Blob. webkitSlice (). 2 Eine Version von slice (), die die Länge als zweites Argument ausführte, wurde in Firefox 4 implementiert. Da sich diese Syntax jedoch von Array. slice () und String. slice () unterschied. Gecko entfernt Unterstützung und Unterstützung für die neue Syntax als mozSlice (). 3 Vor dem Gecko 12.0 (Firefox 12.0 / Thunderbird 12.0 / SeaMonkey 2.9) gab es einen Fehler, der das Verhalten von slice () beeinflusst hat. Es funktionierte nicht für Start - und Endpositionen außerhalb des Bereichs von 64-Bit-Werten Um 64-Bit-Werte ohne Vorzeichen zu unterstützen. Gecko Notizen: Verfügbarkeit in privilegiertem Code Um aus Chrome-Code, JSM und Bootstrap-Bereich zu verwenden, müssen Sie es wie folgt importieren: Blob ist in den Worker-Bereichen verfügbar. Siehe auch

No comments:

Post a Comment