Eine Falle bei fileReaderWenn Sie fileReader zum Durchsuchen von Bildern verwenden, Verwenden des Base64-Formats var Datei = this.$refs.resource.files[0] var reader = neuer FileReader(); // Lesen Sie die Datei als DataURL: reader.readAsDataURL(Datei); //Der Rückruf-JS nach dem Lesen ist ein Multithread-Reader.onloadend=(e)=>{ } Javascript selbst ist Single-Threaded und hat keine asynchronen Funktionen. Da in Browsern JavaScript verwendet wird und der Browser selbst ein typischer GUI-Arbeitsthread ist, werden GUI-Arbeitsthreads in den meisten Systemen als Ereignisverarbeitung implementiert, um blockierende Interaktionen zu vermeiden, wodurch das asynchrone Gen von JavaScript entsteht. Alles, was danach geschah, hatte hier seinen Ursprung. Das stimmt: Netzwerk, Dateien. . . . Alle sind auf Basis von Browser-Schnittstellen implementiert Wenn dieselbe Datei zweimal gelesen wird, wird das Ereignis zum Abschluss des Ladevorgangs nicht ausgeführt. Fallstricke von FileReader unter iOS (Image zu Base64)Ich arbeite gerade an einem Projekt. Das Hochladen von Bildern ist eine sehr alte Funktion. Dann möchte ich das Bild komprimieren und direkt auf base64 hochladen... Der Code, den ich am Anfang verwendet habe var Dateiupload = Funktion (Objekt, Rückruf) { //Überprüfen Sie, ob der Browser das FileReader-Objekt unterstützt if (typeof FileReader == "undefined") { alert("Ihr Browser unterstützt das FileReader-Objekt nicht!"); } var Datei = Obj; //Beurteilen, ob der Typ ein Bild ist, wenn (!/image\/\w+/.test(file.type)){ alert("Bitte stellen Sie sicher, dass es sich bei der Datei um einen Bildtyp handelt"); gibt false zurück; } var reader = neuer FileReader(); reader.onload = Funktion (e) { var img = neues Bild, width = 95, //Bildgrößenänderungsbreite quality = 0.2, //Bildqualität canvas = document.createElement('canvas'), Schublade = Leinwand.getContext("2d"); img.src = dieses.Ergebnis; var scale = parseInt(Bildhöhe / Bildbreite); img.width=Breite; img.height = Breite * Maßstab; Leinwand.Breite = Bild.Breite; Leinwandhöhe = Bildhöhe; Schublade.drawImage(testimgId, 0, 0, Leinwandbreite, Leinwandhöhe); var base64 = canvas.toDataURL('image/jpeg', 0.2); konsole.log(base64); var image_base64 = img.src.replace("data:image/png;base64,",""); image_base64=URI-Komponente kodieren(image_base64); Alarm("19") //Rückruf aufrufen callback&&callback(img.src); } reader.readAsDataURL(Datei); } Der obige Code funktioniert auf PC und Android einwandfrei, gibt unter iOS jedoch eine feste Zeichenfolge mit Base64-Kodierung zurück, unabhängig davon, welches Bild Sie hochladen. Dann ändern... Nochmal ändern..... Verschiedene Dokumente anzeigen.. Weiter ändern... So wurde es schließlich gelöst Funktion getBase64(Dateiobjekt){ var Datei = Dateiobjekt, cvs = document.getElementById("Leinwand"), ctx = cvs.getContext("2d"); if(Datei){ var url = window.URL.createObjectURL(file); //PS: Nicht kompatibel mit IE var img = neues Bild(); img.src = URL; img.onload = Funktion(){ ctx.clearRect(0,0,cvs.Breite,cvs.Höhe); cvs.width = Bildbreite; cvs.height = img.height; ctx.drawImage(Bild,0,0,Bildbreite,Bildhöhe); var base64 = cvs.toDataURL("bild/png"); Rückruf (Base64); Alarm("20") } } } Das ist der Sinn des Teilens ... Der Grund ist, dass FileReader-Objekte unter iOS nicht unterstützt werden! Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Das könnte Sie auch interessieren:
|
<<: translate(-50%,-50%) in CSS erzielt horizontalen und vertikalen Zentrierungseffekt
>>: Eine kurze Diskussion über den Entwurf und die Optimierung von MySQL-Baumstrukturtabellen
Wir haben vorgestellt, wie man mit den CSS3-Spalt...
Vorwort Projektanforderungen: Installieren Sie da...
MySQL ist eine häufig verwendete Open-Source-Date...
Vorwort Eine der Funktionen eines Interceptors be...
Nachdem ich MySQL installiert hatte, erhielt ich ...
Derzeit sind die Felder „Grundlegende Verwendung“...
Inhaltsverzeichnis Überblick 1. Abhängigkeitsinje...
1. Hintergrund Netplan ist ein neues Befehlszeile...
Konfiguration der Hauptbibliothek 1. Konfiguriere...
In diesem Artikel werden die Installations- und K...
Inhaltsverzeichnis Erstellen Sie ein Docker-Image...
In diesem Artikelbeispiel wird der spezifische Co...
In diesem Artikelbeispiel wird der spezifische Ja...
Schritt 1: Ubuntu-Quelle hinzufügen Wechseln Sie ...
Inhaltsverzeichnis 1. Was ist Set 2. Konstruktor ...